के लिये
for
छोरों बहुत अधिक कुशल हैं। यह एक लूपिंग निर्माण है जिसे विशेष रूप से पुनरावृति के लिए डिज़ाइन किया गया है, जबकि एक शर्त सही है , एक ही समय में एक स्टेपिंग तंत्र की पेशकश (आमतौर पर पुनरावृत्ति को बढ़ाने के लिए)। उदाहरण:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
यह पता चलता है कि नहीं है के लिए -loops हमेशा और अधिक कुशल हो जाएगा, सिर्फ इतना है कि जे एस इंजन और ब्राउज़र उन्हें अनुकूलित किया है तो हो सकता है। वर्षों से समझौता किया गया है कि कौन से लूपिंग निर्माण अधिक कुशल है (के लिए, जबकि, कम, रिवर्स-जबकि, आदि) - अलग-अलग ब्राउज़रों और जेएस इंजनों के अपने कार्यान्वयन हैं जो समान परिणाम उत्पन्न करने के लिए अलग-अलग कार्यप्रणालियों की पेशकश करते हैं। जैसा कि ब्राउज़र आगे प्रदर्शन मांगों को पूरा करने के लिए अनुकूलन करते हैं, सैद्धांतिक रूप [].forEach
से इस तरह से लागू किया जा सकता है कि यह तेजी से या एक के लिए तुलनीय है for
।
लाभ:
- कुशल
- प्रारंभिक लूप समाप्ति (सम्मान
break
और continue
)
- स्थिति नियंत्रण (
i<n
कुछ भी हो सकता है और किसी सरणी के आकार के लिए बाध्य नहीं)
- वैरिएबल स्कूपिंग ( लूप समाप्त होने के बाद उपलब्ध
var i
पत्तियां i
)
प्रत्येक के लिए
.forEach
ऐसी विधियाँ हैं जो मुख्य रूप से सरणियों पर पुनरावृति करती हैं (अन्य गणना योग्य, जैसे कि Map
और Set
वस्तुओं पर)। वे नए हैं और कोड प्रदान करते हैं जो पढ़ने में आसान है। उदाहरण:
[].forEach((val, index)=>{
...
});
लाभ:
- चर सेटअप शामिल नहीं है (सरणी के प्रत्येक तत्व पर iterates)
- फ़ंक्शंस / एरो-फ़ंक्शंस चर को ब्लॉक
में स्कोप करते हैं। ऊपर दिए गए उदाहरण val
में, नए बनाए गए फ़ंक्शन का एक पैरामीटर होगा। इस प्रकार, val
लूप से पहले बुलाया जाने वाला कोई भी वैरिएबल समाप्त होने के बाद अपने मूल्यों को धारण करेगा।
- विषयगत रूप से अधिक बनाए रखने योग्य है क्योंकि यह पहचानना आसान हो सकता है कि कोड क्या कर रहा है - यह एक असंख्य पर चलने वाला है; जबकि किसी भी लूपिंग योजनाओं के लिए एक लूप का उपयोग किया जा सकता है
प्रदर्शन
प्रदर्शन एक मुश्किल विषय है, जिसे आम तौर पर कुछ अनुभव की आवश्यकता होती है जब यह पूर्वविवेक या दृष्टिकोण पर आता है। समय से पहले निर्धारित करने के लिए (विकसित करते समय) कितना अनुकूलन की आवश्यकता हो सकती है, एक प्रोग्रामर को समस्या के मामले के साथ पिछले अनुभव का एक अच्छा विचार होना चाहिए, साथ ही संभावित समाधानों की अच्छी समझ भी होनी चाहिए।
कुछ मामलों में jQuery का उपयोग करना कई बार बहुत धीमा हो सकता है (एक अनुभवी डेवलपर यह जान सकता है), जबकि अन्य समय एक गैर-मुद्दा हो सकता है, जिस स्थिति में पुस्तकालय के क्रॉस-ब्राउज़र अनुपालन और अन्य कार्यों को करने में आसानी (जैसे, AJAX,) ईवेंट-हैंडलिंग) सहेजे गए विकास (और रखरखाव) के समय के लायक होगा।
एक और उदाहरण है, अगर प्रदर्शन और अनुकूलन सब कुछ था, तो मशीन या असेंबली के अलावा कोई अन्य कोड नहीं होगा। जाहिर है कि ऐसा नहीं है क्योंकि कई अलग-अलग उच्च स्तरीय और निम्न स्तर की भाषाएं हैं, जिनमें से प्रत्येक का अपना ट्रेडऑफ़ है। इन ट्रेडऑफ में शामिल हैं, लेकिन विशेषज्ञता, विकास में आसानी और गति, रखरखाव में आसानी और गति, अनुकूलित कोड, त्रुटि मुक्त कोड आदि तक सीमित नहीं हैं।
पहुंच
यदि आपके पास एक अच्छी समझ नहीं है, तो किसी चीज को अनुकूलित कोड की आवश्यकता होगी, यह आम तौर पर बनाए रखने योग्य कोड लिखने के लिए अंगूठे का एक अच्छा नियम है। वहां से, आप परीक्षण कर सकते हैं और इंगित कर सकते हैं कि आवश्यकता होने पर अधिक ध्यान देने की आवश्यकता है।
उस ने कहा, कुछ स्पष्ट अनुकूलन सामान्य अभ्यास का हिस्सा होना चाहिए और किसी भी विचार की आवश्यकता नहीं होनी चाहिए। उदाहरण के लिए, निम्नलिखित लूप पर विचार करें:
for (var i=0; i < arr.length; ++i ){}
लूप के प्रत्येक पुनरावृत्ति के लिए, जावास्क्रिप्ट arr.length
प्रत्येक चक्र पर एक कुंजी-लुकअप लागत संचालन को पुनः प्राप्त कर रहा है। ऐसा नहीं होने का कोई कारण नहीं है:
for (var i=0, n=arr.length; i < n; ++i){}
यह वही काम करता है, लेकिन केवल arr.length
एक बार पुनर्प्राप्त करता है , चर को कैशिंग करता है और आपके कोड का अनुकूलन करता है।