জাভাস্ক্রিপ্টে স্ট্রিংগুলি সংযুক্ত করার সবচেয়ে কার্যকরী উপায়?


163

জাভাস্ক্রিপ্টে আমার একটি লুপ রয়েছে যার অনেকগুলি পুনরাবৃত্তি রয়েছে এবং প্রতিটি পুনরাবৃত্তিতে আমি অনেক +=অপারেটর নিয়ে একটি বিশাল স্ট্রিং তৈরি করছি । স্ট্রিং তৈরি করার আরও কার্যকর উপায় আছে কি? আমি একটি গতিশীল অ্যারে তৈরি করার বিষয়ে ভাবছিলাম যেখানে আমি এতে স্ট্রিং যুক্ত রাখি এবং তারপরে একটি যোগদান করি। কেউ কি এটির দ্রুততম পদ্ধতির ব্যাখ্যা এবং উদাহরণ দিতে পারে?


2
আপনি স্ট্রিংটি কীসের জন্য ব্যবহার করছেন? এ সম্পর্কিত যে কোনও পারফরম্যান্স টিপস আপনার পরিবেশ, আপনার স্ট্রিংয়ের আকারগুলির উপর নির্ভর করে আলাদা হতে চলেছে, কোনও নির্দিষ্ট জেএস ইঞ্জিন কীভাবে বিভিন্ন ক্রিয়াকলাপ ইত্যাদিকে অনুকূল করে তোলে ইত্যাদি
বেন ম্যাককর্মিক


5
এই লিঙ্কে চেক করুন jsperf.com/join-concat/2
র্যাব

আমি আইই 9 ব্যবহার করছি তবে এটি আইই 8 সামঞ্জস্যতা মোডে (যা আমি পরিবর্তন করতে পারি না)। বিশাল স্ট্রিং এমন একটি জিনিস যা আমি জকিউরি ব্যবহার করে ডোমটিতে প্রবেশ করিয়ে দেব।
ওমেগা

উত্তর:


135

জেএসপিআইপি-র বেঞ্চমার্কের উপর ভিত্তি করে দেখে মনে হচ্ছে যে +=প্রতিটি ব্রাউজারে অগত্যা না হলেও ব্যবহার করা দ্রুততম পদ্ধতি।

ডোমে স্ট্রিং তৈরির জন্য, প্রথমে স্ট্রিংটি সংযুক্ত করা এবং তারপরে ডিওমে যুক্ত করা ভাল , বরং এটি পুনরাবৃত্তভাবে ডোমে যুক্ত করুন। যদিও আপনার নিজের কেসটি বেঞ্চমার্ক করা উচিত।

(সংশোধনের জন্য ধন্যবাদ @ জাজিবি)


1
সংযুক্ত পৃষ্ঠাটি দেখুন। দেখে মনে হচ্ছে +=একটি অ্যারেতে যোগ দেওয়ার মধ্যে কিছুটা পার্থক্য রয়েছে ।
জাকুব হ্যাম্পল

মনে হয় এটি প্রতিটি স্ট্রিংয়ের জন্য এটি ডিওএম-এ যুক্ত করা হয় 66%(আই আই 9 এর জন্য) এটির স্ট্রিং তৈরি করা এবং তারপরে ডোমটিতে স্ট্রিং যুক্ত করার চেয়ে দ্রুত।
ওমেগা

লিঙ্কযুক্ত পৃষ্ঠাটি উভয় পরীক্ষার জন্য + = ব্যবহার করে, দর্শনার্থে। যোগ () না, সুতরাং এটি অর্থহীন পরীক্ষা যা কেবল কোনও "পার্থক্য" হিসাবে গোলমাল দেখায়। শোরগোলের জেএস কীভাবে হতে পারে তার একটি ভাল উদাহরণ ... ডম স্ট্রিংয়ের চেয়ে ধীরে ধীরে, তাই এটিকে অল্প ব্যবহার করুন।
ডান্ডাভিস

সময় কিন্তু একটি উপাদান। পুনরাবৃত্তির রুটিনগুলির জন্য, আমি ভাবছি যে বিভিন্ন পদ্ধতির মধ্যে জিসির কী প্রভাব পড়ে?
ডেভিড ব্র্যাডলি

বড় স্ট্রিং জন্য, array.join বাঞ্ছনীয় কারণে স্ট্রিং CONCAT এর খুবই কষ্টদায়ক স্মৃতি বাগ হতে পারে bugs.chromium.org/p/v8/issues/detail?id=3175
mwag

70

এই সম্মেলনে নিজেই আমার কোনও মন্তব্য নেই, তবে আমি @ জাকুব হ্যাম্পলের পরামর্শটি উল্লেখ করতে চাই:

ডোমে স্ট্রিং তৈরির জন্য, কিছু ক্ষেত্রে পুনরাবৃত্তভাবে DOM এ যুক্ত করা ভাল, তারপরে একবারে একটি বিশাল স্ট্রিং যুক্ত করুন।

এটি ভুল, কারণ এটি একটি ত্রুটিযুক্ত পরীক্ষার উপর ভিত্তি করে। এই পরীক্ষাটি কখনই ডম-এ অন্তর্ভুক্ত হয় না।

এই নির্দিষ্ট পরীক্ষা দেখায় যে রেন্ডারিংয়ের আগে একবারে স্ট্রিং তৈরি করা অনেক বেশি, খুব বেশি দ্রুত। এটি কোনও প্রতিযোগিতাও নয়।

(দুঃখিত, এটি একটি পৃথক উত্তর, তবে আমার কাছে এখনও উত্তর সম্পর্কে মন্তব্য করার মতো যথেষ্ট প্রতিবেদন নেই))


4
আমি মনে করি এটি নিজের উপর একটি উত্তর হওয়া মূল্যবান কারণ এটির একটি পরীক্ষা এবং একটি উপসংহার রয়েছে (যদিও পরীক্ষাটি অন্য উত্তরের উপর ভিত্তি করে / অনুপ্রাণিত, এটি ঠিক হওয়া উচিত), দুঃখিত হওয়ার দরকার নেই।
ব্যবহারকারী 202729

14

তিন বছর আগে এই প্রশ্নের উত্তর দেওয়া হয়েছিল তবে আমি যেভাবেই হোক আমার উত্তর সরবরাহ করব :)

আসলে, গৃহীত উত্তর পুরোপুরি সঠিক নয়। জাকুবের পরীক্ষায় হার্ডকোডযুক্ত স্ট্রিং ব্যবহার করা হয়েছে যা জেএস ইঞ্জিনকে কোড এক্সিকিউশনটি অনুকূল করতে দেয় (গুগলের ভি 8 এই স্টাফটিতে সত্যিই ভাল!) আপনি যত তাড়াতাড়ি সম্পূর্ণরূপে এলোমেলো স্ট্রিং ব্যবহার করবেন ( এখানে জেএসপিআইপি রয়েছে ) তারপরে স্ট্রিং কনক্যান্টেশন দ্বিতীয় স্থানে থাকবে।


আকর্ষণীয়ভাবে আমার উইন্ডোজ মেশিনে ক্রোম 54 এবং ফায়ারফক্স 45 এর সাথে, কনক্যাট আপনার সংস্করণটি ব্যবহার করে অন্য দুটির চেয়ে দ্বিগুণ গতিযুক্ত fast অন্য ১১ টি ব্রাউজারে আইআই ১১ এর তিনটিই অ-কনক্যাট হিসাবে ধীর হয়ে আছে।
শনফুমো

4
এটি সংস্করণ থেকে সংস্করণে পৃথক। আমার ধারণা, এই মুহুর্তে ক্রমের ভিএম-তে কিছু প্রাক-অপ্টিমাইজেশন থাকতে পারে। আমি Chrome v53 এ আবার পরীক্ষা করেছি এবং সংক্ষেপণ এখন দ্রুততম সমাধান: ডি একই হার্ডওয়্যার কিন্তু বিভিন্ন ক্রোম সংস্করণ সম্পূর্ণ ভিন্ন ফলাফল দেয়।
ভোলাডাইমির উসরস্কি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.