मैं इस जवाब के साथ एक व्यापक तस्वीर देने की कोशिश करता हूं।
कोष्ठक में निम्नलिखित विचार मेरा विश्वास था जब तक कि मैंने अभी हाल ही में इस मुद्दे का परीक्षण नहीं किया है:
[[ निम्न स्तर की भाषाओं के संदर्भ में जैसे C / C ++ , कोड को संकलित किया जाता है ताकि प्रोसेसर के पास एक विशेष सशर्त कूद कमांड हो जब एक चर शून्य (या गैर-शून्य) हो।
इसके अलावा, यदि आप इस अधिक अनुकूलन की परवाह करते हैं, तो आप इसके ++i
बजाय जा सकते हैं i++
, क्योंकि ++i
एक ही प्रोसेसर कमांड है जबकि i++
इसका मतलब है j=i+1, i=j
।]
वास्तव में तेजी से छोरों को अनियंत्रित करके किया जा सकता है:
for(i=800000;i>0;--i)
do_it(i);
यह जिस तरह से धीमी हो सकती है
for(i=800000;i>0;i-=8)
{
do_it(i); do_it(i-1); do_it(i-2); ... do_it(i-7);
}
लेकिन इसके कारण काफी जटिल हो सकते हैं (बस उल्लेख करने के लिए, गेम में प्रोसेसर कमांड प्रीप्रोसेसिंग और कैश हैंडलिंग के मुद्दे हैं)।
के अनुसार उच्च स्तरीय भाषाओं के , जावास्क्रिप्ट के अनुसार , जैसा कि आपने पूछा, यदि आप पुस्तकालयों पर भरोसा करते हैं, तो आप लूपिंग के लिए अंतर्निहित कार्यों का अनुकूलन कर सकते हैं। उन्हें यह तय करने दें कि यह कैसे किया जाता है।
नतीजतन, जावास्क्रिप्ट में, मैं कुछ का उपयोग करने का सुझाव दूंगा
array.forEach(function(i) {
do_it(i);
});
यह कम त्रुटि वाला भी है और ब्राउज़रों के पास आपके कोड को अनुकूलित करने का मौका है।
[टिप्पणी: न केवल ब्राउज़र, बल्कि आपके पास आसानी से अनुकूलन करने के लिए एक स्थान है, बस forEach
फ़ंक्शन (ब्राउज़र पर निर्भरता से) को फिर से परिभाषित करें ताकि यह नवीनतम सर्वश्रेष्ठ प्रवंचना का उपयोग करे! :) @AMK विशेष मामलों में कहते हैं कि यह उपयोग करने के बजाय array.pop
या इसके लायक है array.shift
। यदि आप ऐसा करते हैं, तो इसे पर्दे के पीछे रखें। अत्यंत overkill विकल्प जोड़ने के लिए करने के लिए है forEach
पाशन एल्गोरिथ्म चयन करने के लिए।]
इसके अलावा, निम्न स्तर की भाषाओं के लिए भी, यदि संभव हो तो जटिल, लूप किए गए संचालन के लिए कुछ स्मार्ट लाइब्रेरी फ़ंक्शन का उपयोग करना सबसे अच्छा अभ्यास है।
उन पुस्तकालयों को आपकी पीठ के पीछे चीजें (बहु-थ्रेडेड) भी डाल सकती हैं और विशेष प्रोग्रामर भी उन्हें अप-टू-डेट रखते हैं।
मैंने थोड़ी और जांच की और यह पता चला कि C / C ++ में, यहां तक कि 5e9 = (50,000x100,000) के संचालन के लिए, ऊपर और नीचे जाने के बीच कोई अंतर नहीं है यदि परीक्षण स्थिरांक के खिलाफ किया जाता है जैसे @alestanis कहते हैं। (JsPerf परिणाम कभी-कभी असंगत होते हैं, लेकिन बड़े और एक ही कहते हैं: आप एक बड़ा बदलाव नहीं कर सकते।)
इसलिए --i
ऐसा होना "पॉश" बात है। यह केवल आपको एक बेहतर प्रोग्रामर जैसा दिखता है। :)
दूसरी ओर, इस 5e9 स्थिति में अनियंत्रित होने के कारण, इसने मुझे 12 सेकंड से 2.5 सेकंड तक नीचे ला दिया, जब मैं 10 के दशक में चला गया, और 2.1 सेकंड में जब मैं 20 के दशक में चला गया। यह अनुकूलन के बिना था, और अनुकूलन ने बहुत कम समय के लिए चीजों को अप्राप्य बना दिया है। :) (मेरी तरह से ऊपर या उपयोग करने पर अनियंत्रित किया जा सकता है i++
, लेकिन यह जावास्क्रिप्ट में आगे की चीजें नहीं लाता है।)
सभी में: नौकरी के साक्षात्कार के लिए i--
/ i++
और ++i
/ i++
अंतर रखें , array.forEach
उपलब्ध होने पर या अन्य जटिल पुस्तकालय कार्यों के लिए छड़ी । ;)