अद्यतन:
इन उत्तरों में पुराने चाल का एक बहुत पुराने ब्राउज़र में व्याख्या की जे एस के लिए महान हैं।
किसी भी आधुनिक जेएस कार्यान्वयन में सभी आधुनिक ब्राउज़र, नोड और नवीनतम मोबाइल वेबव्यू समेत, इनलाइन फ़ंक्शंस को वास्तव में जेआईटी (जेएस कंपाइलर) द्वारा कैश किया जा सकता है, जिससे सरणी पुनरावृत्ति के लिए बहुत तेज़ विकल्प होता है। यह विपरीत होता था जहां एक समारोह में कॉल करने के लिए बार-बार एक बिल्ड-अप/टियरडाउन प्रक्रिया की आवश्यकता होती थी जो गैर-तुच्छ पाश के प्रदर्शन को गंभीर रूप से कम कर सकती थी।
सर्वोत्तम प्रदर्शन के लिए मैं किसी भी संदर्भ को संदर्भित करने से बचूंगा जो किसी तर्क के रूप में पारित नहीं किया गया था या यदि आपको ऐसा करने की आवश्यकता नहीं है तो स्वयं को परिभाषित किया गया है। मैं निश्चित रूप से 100% निश्चित नहीं हूं लेकिन मैं देख सकता हूं कि ऐसा क्यों हो सकता है।
गेटर वैल्यू जिसमें सरणी लम्बाई या डोम नोड गुणों की तरह किसी भी प्रकार की लुकअप प्रक्रिया शामिल है, शायद वे भी एक चर के लिए सबसे अच्छा कैश किए गए हैं।
लेकिन उससे परे मैं केवल काम से बचने के बुनियादी सिद्धांत को अपने perf प्रयासों को मार्गदर्शन करने की कोशिश करता हूं। पूर्व-गणना करने वाली चीजें जिन्हें लूप में पुन: गणना करने की आवश्यकता नहीं होती है, या क्वेरी चयनकर्ता को कैशिंग करना अक्सर DOM में rummaging के बजाय var के परिणामस्वरूप होता है। जेआईटी व्यवहार का लाभ उठाने के लिए बहुत मेहनत करने का प्रयास शायद सुंदर आर्केन प्राप्त करने जा रहा है और समय के साथ या सभी जेआईटी में पकड़ने की संभावना नहीं है।
पुराने उत्तर:
ठीक है, पाठ की दीवार भूल जाते हैं। गोली अंक:
var i = someArray.length; //length is cached
someArray.reverse(); //include this only if iterating in 0-(length-1) order is important
while(i--){
//run a test statement on someArray[i];
}
लंबाई कैश किया गया है और तुरंत सूचकांक
जे एस AFAIK में पीछे की ओर पुनरावृत्ति दो ऑपरेंड के साथ एक तार्किक ऑपरेटर से परहेज कर रहा है के लाभ में बनाया। इस मामले में हम सिर्फ एक संख्या का मूल्यांकन कर रहे हैं। यह सच है या यह शून्य और झूठा है।
मुझे यह भी सुरुचिपूर्ण लगता है।
स्रोत
2012-04-02 19:02:29
'forEach' शायद कुछ मूल अनुकूलन या कुछ है। –
और भी, आपको टेस्ट केस 1 में सरणी से मूल्य भी नहीं मिल रहा है, आप 'सरणी [i] ' –
1 के बजाय लॉगिंग कर रहे हैं 1) आपको प्रत्येक परीक्षण पर सरणी नहीं बनाना चाहिए, आप परिभाषित कर सकते हैं वर्र्स जो सभी परीक्षणों पर पहुंच योग्य होंगे 2) आप 'लम्बाई' प्रत्येक लूप – ajax333221