2014 Whileফিরে এসেছে
কেবল যৌক্তিক মনে করুন।
এটা দেখ
for( var index = 0 , length = array.length ; index < length ; index++ ) {
//do stuff
}
- কমপক্ষে 2 টি ভেরিয়েবল তৈরি করতে হবে (সূচী, দৈর্ঘ্য)
- সূচী দৈর্ঘ্যের চেয়ে ছোট কিনা তা পরীক্ষা করা দরকার
- সূচক বাড়াতে হবে
forলুপ 3 প্যারামিটার আছে
এখন বলুন কেন এটির চেয়ে দ্রুত হওয়া উচিত:
var length = array.length;
while( --length ) { //or length--
//do stuff
}
- একটি পরিবর্তনশীল
- কোনও চেক নেই
- সূচক হ্রাস পেয়েছে (মেশিনগুলি এটি পছন্দ করে)
while একটি মাত্র প্যারামিটার রয়েছে
ক্রোম 28 যখন দেখিয়েছিল যে লুপের জন্য সময়ের চেয়ে দ্রুত হয় তখন আমি সম্পূর্ণ বিভ্রান্ত হয়ে পড়েছিলাম। এটি অবশ্যই কিছুটা বেন হয়েছে
"আহা, সবাই লুপের জন্য ব্যবহার করছে, ক্রোমের জন্য বিকাশ করার সময় সেটিতে ফোকাস করা উচিত।"
তবে এখন, ২০১৪ সালে যখন লুপটি আবার ক্রোমে ফিরে এসেছে। এটি 2 গুণ দ্রুত, অন্যান্য / পুরানো ব্রাউজারগুলিতে এটি সর্বদা দ্রুত ছিল।
ইদানীং আমি কিছু নতুন পরীক্ষা করেছি। এখন সত্যিকারের দাবীতে এই সংক্ষিপ্ত কোডগুলি মূল্যহীন এবং jsperf আসলে লুপ লুপটি যথাযথভাবে সম্পাদন করতে পারে না কারণ এটির অ্যারেওলাইট পুনরায় তৈরি করা দরকার যা সময় নেয়।
আপনি জেএসপিফির উপর কিছুক্ষণ লুপের আসল গতি পেতে পারবেন না।
আপনাকে আপনার নিজস্ব কাস্টম ফাংশন তৈরি করতে হবে এবং এটি দিয়ে চেক করতে হবে window.performance.now()
এবং হ্যাঁ ... লুপটি কেবল দ্রুততর হওয়ার কোনও উপায় নেই।
আসল সমস্যাটি হ'ল ডম ম্যানিপুলেশন / রেন্ডারিং সময় / অঙ্কনের সময় বা তবে আপনি এটিকে কল করতে চান।
উদাহরণস্বরূপ আমার কাছে একটি ক্যানভাস দৃশ্য রয়েছে যেখানে আমাকে স্থানাঙ্ক এবং সংঘর্ষ গণনা করতে হবে ... এটি 10-200 মাইক্রো সেকেন্ডের (মিলিসেকেন্ড নয়) এর মধ্যে করা হয়। এটি সমস্ত কিছু রেন্ডার করতে আসলে বিভিন্ন মিলিসেকেন্ড লাগে Dডম হিসাবে একই।
কিন্তু
কিছু ক্ষেত্রে এর জন্য আরও একটি দুর্দান্ত পারফরম্যান্ট উপায় ব্যবহার করা হচ্ছে loop... উদাহরণস্বরূপ একটি অ্যারের অনুলিপি / ক্লোন করা
for(
var i = array.length ;
i > 0 ;
arrayCopy[ --i ] = array[ i ] // doing stuff
);
পরামিতিগুলির সেটআপটি লক্ষ্য করুন:
- লুপের মতোই আমি কেবল একটি ভেরিয়েবল ব্যবহার করছি
- সূচক 0 এর চেয়ে বড় কিনা তা পরীক্ষা করা দরকার;
- যেহেতু আপনি দেখতে পাচ্ছেন যে প্রতিটি লুপের জন্য ব্যবহার করা লুপগুলির জন্য এই পদ্ধতির তুলনায় স্বাভাবিক, আমি 3 তম প্যারামিটারের ভিতরে স্টাফ করি এবং আমি সরাসরি অ্যারের অভ্যন্তরেও হ্রাস পাই।
বলেছিল, এটি নিশ্চিত করে যে মেশিনগুলি -
আমি লিখছি যে আমি এটিকে আরও ছোট করার এবং কিছু অকেজো জিনিসগুলি অপসারণ করার জন্য ভাবছিলাম এবং একই স্টাইলটি ব্যবহার করে এটি লিখেছিলাম:
for(
var i = array.length ;
i-- ;
arrayCopy[ i ] = array[ i ] // doing stuff
);
এমনকি যদি এটি ছোট হয় তবে মনে হয় যে iআরও একটি সময় ব্যবহার করা সমস্ত কিছু ধীর করে দেয়। এটি পূর্বের forলুপের চেয়ে 1/5 ধীর while।
দ্রষ্টব্য:; ছাড়া looo পরে খুবই গুরুত্বপূর্ণ{}
এমনকি যদি আমি আপনাকে কেবল বলেছি যে স্ক্রিপ্টগুলি পরীক্ষা করার জন্য জাস্পফারফ সবচেয়ে ভাল উপায় নয় .. আমি এখানে এই 2 টি লুপ যুক্ত করেছি
http://jsperf.com/caching-array-length/40
এবং এখানে জাভাস্ক্রিপ্টে পারফরম্যান্স সম্পর্কে অন্য উত্তর
https://stackoverflow.com/a/21353032/2450730
এই উত্তরটি জাভাস্ক্রিপ্ট লেখার পারফরম্যান্স পদ্ধতিগুলি দেখানো। সুতরাং আপনি যদি এটি পড়তে না পারেন, জিজ্ঞাসা করুন এবং আপনি উত্তর পেয়ে যাবেন বা জাভাস্ক্রিপ্ট সম্পর্কে একটি বই পড়বেন http://www.ecma-international.org/ecma-262/5.1/