2012-01-15 12 views
5

वर्तमान में मेरे पास एक ऐसा फ़ंक्शन है जो लगभग 200 बार चलता है।भारी चर के बाहर काम करना चाहिए?

इस तरह समारोह देखो:

function GetB(av,bol){ 
var bxes=[ 
["11","12","13","21","22","23","31","32","33"], 
["14","15","16","24","25","26","34","35","36"], 
["17","18","19","27","28","29","37","38","39"], 
["41","42","43","51","52","53","61","62","63"], 
["44","45","46","54","55","56","64","65","66"], 
["47","48","49","57","58","59","67","68","69"], 
["71","72","73","81","82","83","91","92","93"], 
["74","75","76","84","85","86","94","95","96"], 
["77","78","79","87","88","89","97","98","99"] 
]; 

//code 
} 

मेरी पहली चिंता यह है कि इस सरणी सब कुछ धीमा हो रहा है, क्योंकि मुझे लगता है कि हर बार पुनर्लेखन है सरणी bxes (या ऐसा ही कुछ)

यह bxes सरणी कभी संशोधित नहीं होती है और मुझे इसे वैश्विक बनाने में कोई फर्क नहीं पड़ता।

  • क्या मुझे पुनर्लेखन चीज़ के बारे में चिंता करने की ज़रूरत है? (या ब्राउज़र ट्रैक रखने अगर यह कभी संशोधित किया गया था, और अगर यह नहीं था कि यह फिर से लिखने नहीं होगा)
+0

संभावित डुप्लिकेट [जावास्क्रिप्ट कचरा संग्रह क्या है?] (Http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection) –

उत्तर

3

क्यों आप इसे समारोह के बाहर कदम नहीं हैं? (इसे प्रदर्शन समस्या का कारण क्यों है?)

यह आवश्यक नहीं है कि यह "वैश्विक" भी हो - केवल फ़ंक्शन के मूल दायरे में - लेकिन दोनों फ़ंक्शन और bxes और अन्य कोड माता-पिता में मौजूद हो सकते हैं कार्य या बंद ...

(function(){ 
    var bxes = [...]; 
    window.GetB = function(av,bol){...}; 
})(); 
+0

मुझे याद है कि इन स्व-कॉलिंग कार्यों के बारे में एक बार पढ़ना याद है। बस एक सवाल, मेरा अधिभार/तैयार कोड उस या अंदर से बाहर होना चाहिए? – mithril333221

+0

वास्तव में कोई फर्क नहीं पड़ता - लेकिन अगर आप इसे बंद करने या पैरेंट फ़ंक्शन के अंदर पहले से नहीं रखते हैं तो मैं इसे अंदर रखूंगा - वैश्विक नामस्थान प्रदूषण को रोकने के प्रयास में (http://blogger.ziesemer.com /2007/10/respecting-javascript-global-namespace.html)। (आपका अधिभार/तैयार फ़ंक्शन पहले से ही इस बंद होने के रूप में कार्य कर रहा है।) – ziesemer

3

एक साधारण बेंचमार्क उत्तर दिखाता है। जैसा कि आपने लिखा है, समारोह के साथ घोषित किया गया है, 5,000,000 कॉल 12.739 सेकंड लेते हैं। सरणी परिभाषा समारोह के बाहर ले जाया गया है, वही पाश केवल 0.169 खपत करता है।

याद रखें कि यह जावास्क्रिप्ट इंजन के अनुसार अलग-अलग होगा - और इसलिए ब्राउजर - का उपयोग किया जा रहा है।

संबंधित मुद्दे