2012-12-19 42 views
5

मैं अक्सर फ़ंक्शन से फ़ंक्शन तक कई पैरामीटर को पारित कर रहा हूं।क्या मुझे जावास्क्रिप्ट में प्रदर्शन के मामले में किसी ऑब्जेक्ट में एक या एक करके कार्यान्वित फ़ंक्शन पैरामीटर पास करना चाहिए?

ajaxLiveUpdate : function (bindTo, func, interval, 
         dyn, el, lib_template, locale, what) { 
    // do sth 
} 

मैं देख सकता है कि एक वस्तु specs में इन भंडारण मतलब होगा "नेत्रहीन" मैं वस्तु सभी प्रमुख/वैल जोड़े बनाने, assinging के प्रदर्शन निहितार्थ जानने के लिए उत्सुक हूँ और इस तरह लग रहा है ऑब्जेक्ट को पास करना

प्रश्न:
अगर हर एमएस मायने रखता है, क्या समारोह मापदंडों की एक बड़ी संख्या के आसपास शफ़ल करने के लिए सबसे अच्छा और सबसे सुनियोजित तरीका है?

धन्यवाद!

+0

आप कह रहे हैं, इसे छोड़ यह है की तरह? – frequent

+0

ठीक है। बढ़िया है। अभी तक धन्यवाद। – frequent

+0

आपका स्वागत है, और +1, अच्छा सवाल है। –

उत्तर

2

मुझे लगता है कि एक अच्छा अनुकूलक इस सूक्ष्म अनुकूलन को महत्वहीन बना देगा। जो भी आपकी कोडिंग शैली और कोड पढ़ने की आदतों को बेहतर बनाता है, उसका उपयोग करने के लिए स्वतंत्र महसूस करें। यदि आप किसी ऑब्जेक्ट को प्राथमिकता देते हैं, क्योंकि यह अधिक कॉम्पैक्ट है, तो आगे बढ़ें और ऑब्जेक्ट का उपयोग करें। यदि आप स्पष्ट रूप से तर्कों का जादू करना चाहते हैं, तो ऐसा करें।

जावास्क्रिप्ट में, जब आप एक वस्तु से एक मूल्य को पुन: प्राप्त कर रहे हैं यह एक ही है, जैसा कि आप खंड के लिए उपयोग कर रहे हैं एक सरणी पार्स करने के लिए:

1

आप एक वस्तु में समझाया तर्क पार कर लेते हैं, यहाँ क्या होता है। जावास्क्रिप्ट में ऑब्जेक्ट्स का कारण सहयोगी सरणी के समान होता है। तो आप एक कुंजी द्वारा अपने मूल्यों की खोज पर अपने कम्प्यूटेशनल समय बर्बाद कर देंगे।

केवल इस विकल्प का उपयोग करें और केवल तभी यदि आपके पास बहुत सारे तर्क (5 या अधिक) हैं और यह उन्हें व्यवस्थित करने का एक अच्छा तरीका है, साथ ही आप अपने सही प्लेसमेंट से स्वतंत्र तर्कों को पारित करने की क्षमता प्राप्त करेंगे।

2

तर्कों को पारित करने के बजाए ऑब्जेक्ट बनाने और पास करने के दौरान कुछ प्रदर्शन ओवरहेड हो सकता है, लेकिन मुझे संदेह है कि यह आपकी एप्लिकेशन बाधा बनने जा रहा है। मैं कोड पठनीयता की वजह से किसी ऑब्जेक्ट के साथ जाऊंगा।

इसे V8 (node.js v0.10.8) में आजमाया।

console.time(44); 
var f = function(a,b,c,d,e) { 
    return a+b+c+d+e; 
}; 
var s = 0; 
for(var i=0;i<100000000;++i) { 
    s += f(i,i*2,i+1,i-1,i*3); 
} 
console.timeEnd(44); 
console.log(s); 

~ 1440ms

console.time(44); 
var f = function(x) { 
    return x.a+x.b+x.c+x.d+x.e; 
}; 
var s = 0; 
for(var i=0;i<100000000;++i) { 
    s += f({a:i,b:i*2,c:i+1,d:i-1,e:i*3}); 
} 
console.timeEnd(44); 
console.log(s); 

~ 2236ms