জন্য
for
লুপগুলি আরও বেশি দক্ষ। এটি একটি লুপিং কন্সট্রাক্ট যা বিশেষত পুনরুক্ত করার জন্য ডিজাইন করা হয়েছে যখন কোনও শর্ত সত্য হলে একই সময়ে একটি স্টেপিং মেকানিজম সরবরাহ করে (সাধারণত আয়রক বাড়ানোর জন্য)। উদাহরণ:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
এটি সুপারিশ করার জন্য নয় যে -লুপগুলি সর্বদা আরও কার্যকর হবে, ঠিক যেমনটি জেএস ইঞ্জিন এবং ব্রাউজারগুলি তাদের এটির জন্য অনুকূলিত করেছে। কয়েক বছর ধরে সমঝোতা হয়েছে যে লুপিং নির্মাণ আরও কার্যকর (যেমন, যখন হ্রাস, বিপরীত সময়, ইত্যাদি) - বিভিন্ন ব্রাউজার এবং জেএস ইঞ্জিনগুলির নিজস্ব বাস্তবায়ন রয়েছে যা একই ফলাফল তৈরি করতে বিভিন্ন পদ্ধতি সরবরাহ করে। ব্রাউজারগুলি যেমন পারফরম্যান্সের চাহিদা মেটাতে আরও অনুকূল করে তোলে তাত্ত্বিকভাবে [].forEach
এমনভাবে প্রয়োগ করা যেতে পারে যে এটি দ্রুত বা তুলনার সাথে একটি for
।
উপকারিতা:
- দক্ষ
- প্রারম্ভিক লুপ সমাপ্তি (সম্মান
break
এবং continue
)
- শর্ত নিয়ন্ত্রণ (
i<n
যে কোনও কিছু হতে পারে এবং অ্যারের আকারের সাথে আবদ্ধ নয়)
- পরিবর্তনশীল scoping (
var i
পাতা i
লুপ শেষ হওয়ার পরে উপলব্ধ)
প্রতিটির জন্য, প্রত্যেকটির জন্য
.forEach
হ'ল এমন পদ্ধতি যা প্রাথমিকভাবে অ্যারেতে পুনরাবৃত্তি হয় (অন্যান্য সংখ্যাগরিষ্ঠ, যেমন Map
এবং Set
বস্তুগুলির উপরেও )। এগুলি আরও নতুন এবং এমন কোড সরবরাহ করে যা বিষয়গতভাবে পড়া সহজ easier উদাহরণ:
[].forEach((val, index)=>{
...
});
উপকারিতা:
- পরিবর্তনশীল সেটআপ জড়িত না (অ্যারের প্রতিটি উপাদান উপর পুনরাবৃত্তি)
- ফাংশন / তীর-ফাংশন সুযোগ ব্লকের পরিবর্তনশীল
উপরের উদাহরণে val
সদ্য নির্মিত ফাংশনের একটি প্যারামিটার হবে। সুতরাং, val
লুপের আগে ডাকা যে কোনও ভেরিয়েবলগুলি তার মানগুলি শেষ হওয়ার পরে ধরে রাখে।
- কোড কী করছে তা চিহ্নিত করা সহজ হতে পারে বলে বিষয়গতভাবে আরও রক্ষণাবেক্ষণযোগ্য - এটি একটি গণনার উপরে পুনরাবৃত্তি হয়; যদিও কোনও লুপিং স্কিমের জন্য একটি লুপ ব্যবহার করা যেতে পারে
কর্মক্ষমতা
পারফরম্যান্স একটি কৌতূহলোদ্দীপক বিষয়, যা পূর্বাভাস বা দৃষ্টিভঙ্গির ক্ষেত্রে সাধারণত কিছু অভিজ্ঞতা প্রয়োজন। সময়ের পূর্বে (বিকাশকালে) কতটা অপ্টিমাইজেশনের প্রয়োজন হতে পারে তা নির্ধারণ করার জন্য, একজন প্রোগ্রামারকে অবশ্যই সমস্যা কেসের সাথে অতীতের অভিজ্ঞতার একটি ভাল ধারণা থাকতে হবে, পাশাপাশি সম্ভাব্য সমাধানগুলির একটি ভাল বোঝা থাকতে হবে।
কিছু ক্ষেত্রে jQuery ব্যবহার করা অনেক সময় ধীর হতে পারে (একজন অভিজ্ঞ বিকাশকারী এটি জানতে পারে), অন্য সময়গুলি একটি নন-ইস্যু হতে পারে, সেক্ষেত্রে গ্রন্থাগারের ক্রস-ব্রাউজারের সম্মতি এবং অন্যান্য ক্রিয়াকলাপ সম্পাদন করা সহজ (যেমন, এজেএক্স, ইভেন্ট-হ্যান্ডলিং) সময় সাশ্রয়ী বিকাশের (এবং রক্ষণাবেক্ষণের জন্য মূল্যবান হবে)।
আর একটি উদাহরণ হ'ল, যদি পারফরম্যান্স এবং অপ্টিমাইজেশন সব কিছু ছিল, মেশিন বা সমাবেশ ছাড়া অন্য কোনও কোড থাকত না। স্পষ্টতই বিষয়টি তেমনটি হয় না কারণ এখানে অনেকগুলি উচ্চ স্তরের এবং নিম্ন স্তরের ভাষা রয়েছে, যার প্রত্যেকটি তাদের নিজস্ব ট্রেড অফ রয়েছে। এই ট্রেডঅফগুলির মধ্যে অন্তর্ভুক্ত রয়েছে তবে বিশেষায়িতকরণ, বিকাশ স্বাচ্ছন্দ্য এবং গতি, রক্ষণাবেক্ষণের সহজতা এবং গতি, অনুকূলিত কোড, ত্রুটিমুক্ত কোড ইত্যাদি সীমাবদ্ধ নয় etc.
পন্থা
যদি কোনও কিছুকে অনুকূলিত কোডের প্রয়োজন হয় তবে আপনার যদি ভাল বোঝাপড়া না হয় তবে প্রথমে রক্ষণাবেক্ষণযোগ্য কোডটি লেখার জন্য এটি সাধারণত থাম্বের একটি ভাল নিয়ম। সেখান থেকে আপনি পরীক্ষা করতে পারেন এবং এটির প্রয়োজন হলে আরও কী কী মনোযোগের প্রয়োজন তা নির্ধারণ করতে পারেন।
এটি বলেছে, কিছু স্পষ্টত অপ্টিমাইজেশানগুলি সাধারণ অনুশীলনের অংশ হওয়া উচিত এবং কোনও চিন্তাভাবনার প্রয়োজন নেই। উদাহরণস্বরূপ, নিম্নলিখিত লুপটি বিবেচনা করুন:
for (var i=0; i < arr.length; ++i ){}
লুপের প্রতিটি পুনরাবৃত্তির জন্য, জাভাস্ক্রিপ্ট arr.length
প্রতিটি চক্রের একটি মূল-অনুসন্ধান ব্যয় ক্রিয়াকলাপটি পুনরুদ্ধার করছে । এটি না হওয়ার কোনও কারণ নেই:
for (var i=0, n=arr.length; i < n; ++i){}
এটি একই কাজ করে তবে কেবল arr.length
একবার পরিবর্তন করে, ভেরিয়েবলটি ক্যাশে করে এবং আপনার কোডটি অনুকূল করে optim