2015-05-19 8 views
7
// hasOwnProperty approach 
for (key in obj) { 
    if (obj.hasOwnProperty(key)) { 
    value = obj[key]; 
    } 
} 

// Object.keys approach 
keys = Object.keys(obj); 
for (i = 0, l = keys.length; i < l; i++) { 
    value = obj[keys[i]]; 
} 

jsperf Object.keys दृष्टिकोण के अनुसार 50% + तेजी से http://jsperf.com/object-keys-vs-hasownproperty/45ऑब्जेक्ट.कीज़ की तुलना में तेज हैऑनप्रोपर्टी?

ऐसा क्यों है?

+0

आपका परीक्षण वह नहीं हो सकता है जो आप उम्मीद कर रहे हैं, एक साधारण अनुकूलन करेगा: 'कुंजी = ऑब्जेक्ट.कीज (ओबीजे); मूल्य = obj [कुंजी [कुंजी। लम्बाई - 1]]; 'अपने loops को छोड़कर। पहले टेस्ट में, यह प्रत्येक लूप पर एक चेक करता है, क्योंकि दूसरा केवल – Hacketo

+0

के साथ एक वैरिएबल भर रहा है, जाहिर है कि 'इन ऑब्जेक्ट' को 'ऑब्जेक्ट.की' से अधिक करने की ज़रूरत है, और अतिरिक्त रूप से 'हैऑनप्रोपर्टी के लिए फ़िल्टरिंग की आवश्यकता है 'और भी काम है। – Bergi

+1

शायद क्योंकि 'ऑब्जेक्ट.कीएस' को केवल एक बार बुलाया जाता है जबकि 'हैऑनप्रॉपर्टी' को कई बार कहा जाता है (एक बार प्रत्येक गणना योग्य संपत्ति के लिए और एक बार प्रत्येक गैर-गणना योग्य संपत्ति के लिए)। अधिक फ़ंक्शन कॉल का मतलब धीमा कोड है। इसके अलावा, 'Object.keys' एक मूल कार्य है। इसलिए, सभी संभावनाओं में यह एक जावास्क्रिप्ट शिम की तुलना में तेज़ है। –

उत्तर

34
  • Object.keys सभी खुद, गणनीय गुण को खोजता है (ओह, और सरणियों तेजी से कर रहे हैं)।
  • for in अतिरिक्त विरासत में मिला गणनीय गुण, न केवल खुद लोगों
  • for in + hasOwnProperty अतिरिक्त परीक्षण सब वे खुद गुण हैं या नहीं के लिए गुण देखा ऊपर लग रहा है।

भले ही कोई विरासत योग्य गुण नहीं हैं, फिर भी यह करने के लिए अभी भी अधिक काम नहीं है।

+2

आपका उत्तर साफ और समझने में आसान है। –

1

उस थ्रेड में अधिकांश परीक्षण hasownpropertyObject.keys() से तेज़ होने के लिए दिखाते हैं। हालांकि, उन परीक्षणों के लिए, चक्र के माध्यम से गुणों की मात्रा छोटी है (< 20 गुण)।

जहां भी ऑब्जेक्ट गुणों की संख्या बड़ी है (कोई सटीक संख्या नहीं है, 100 कुंजी के साथ परीक्षण Object.keys() स्पष्ट विजेता के रूप में दिखाया गया है), Object.keys() इसे धड़कता है।

https://jsperf.com/object-keys-vs-hasownproperty/55 देखें। परीक्षण में सभी संशोधन देखने के लिए आप पृष्ठ के निचले भाग पर जा सकते हैं।

+0

मुझे नहीं पता कि सौदा क्या है, लेकिन संशोधन 47 के साथ शुरू होता है, यह दिखा रहा है कि 'हैऑनप्रोपर्टी' सबसे तेज़ है। 9,80 9, 7 9 8 बनाम 3,712,304। – blissfool

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

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