2013-03-30 7 views
7

मैं बेंचमार्क है दो तरीकों:सरणी वस्तुओं की तुलना में ऑब्जेक्ट गुणों तक पहुंचने के लिए हमेशा तेज़ क्यों होता है?

पहुँच सरणी आइटम

var object = [10, 15, 20]; 
var x = object[0]; 
var y = object[1]; 
var z = object[2]; 

और पहुँच वस्तु गुण

var object = { 
    x: 10, 
    y: 15, 
    z: 20 
}; 
var x = object.x; 
var y = object.y; 
var z = object.z; 

मैं सरणी आइटम के लिए उपयोग बहुत तेजी से होने की उम्मीद, चूंकि कोई संपत्ति नाम संकल्प शामिल नहीं है।

हालांकि, मेरे आश्चर्य के लिए, ऑब्जेक्ट गुणों तक पहुंच लगभग 30% तेज सभी ब्राउज़रों में थी।

Chart [URL to benchmark]

बेंचमार्क परिणाम मुझे उलझन में बनाया है। किस कारण से पूर्व विधि की तुलना में पूर्व विधि इतनी धीमी होनी चाहिए?

+0

* "... कोई संपत्ति नाम शामिल संकल्प है के बाद से वहाँ।" * आपको क्या लगता है कि वहाँ कोई संपत्ति नाम संकल्प है बनाता है? Arrays सिर्फ फैंसी ऑब्जेक्ट्स हैं। ऐरे इंडेक्स संपत्ति के नाम हैं। –

+1

@ एनोटियम सी सी पृष्ठभूमि से सामान्य ज्ञान। – caiosm1005

+0

हाँ, जावास्क्रिप्ट के साथ कभी-कभी आपको दरवाजे पर सामान्य ज्ञान छोड़ने की आवश्यकता होती है। –

उत्तर

11

आपने ऑब्जेक्ट और परीक्षण में सरणी का निर्माण शामिल किया है। यदि आप initialisation कोड में है कि शब्दों में कहें, अंतर बहुत कम हो जाता है:

http://jsperf.com/object-properties-and-array-items/2

+0

मैं देखता हूँ! तो ओवरहेड सरणी वस्तु के निर्माण से आ रहा होना चाहिए। यही है, एक सादा '[ऑब्जेक्ट]' की तुलना में '[ऐरे]' बनाने में काफी समय लगता है, है ना? – caiosm1005

+1

@ caiosm1005: हां, ऑब्जेक्ट और एरे बनाने में कोई फर्क पड़ता है, जो कि एक सरणी के रूप में आश्चर्यजनक नहीं है, केवल संख्यात्मक इंडेक्स वाले आइटम को संभालने के लिए विशेष कोड के साथ। – Guffa

+0

ताकि हम सुरक्षित रूप से कह सकें कि दोनों प्रक्रियाओं के लिए लगभग एक ही समय लेते हैं। – JerryGoyal

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