2016-11-22 7 views
12

मैं इस लेख को HTML5Rocks पर वी 8 के बारे में पढ़ रहा हूं। लेख पुराना है लेकिन मैं इसे लगभग किसी भी नहीं समझता और यह मुझे परेशान करता है। मैं एक समय में यह 1 कदम उठा रहा हूं लेकिन क्या कोई मुझे Arrays अनुभाग में मदद कर सकता है?क्या कोई जावास्क्रिप्ट में दो प्रकार के सरणी स्टोरेज का वर्णन करने में मदद कर सकता है?

लेख कहता है:

  • फास्ट तत्व:

    सरणी

    आदेश बड़े और विरल सरणियों संभाल करने में, वहाँ आंतरिक सरणी भंडारण के दो प्रकार हैं : कॉम्पैक्ट कुंजी सेट के लिए रैखिक भंडारण

  • शब्दकोश तत्व: हैश तालिका भंडारण अन्यथा

यह सबसे अच्छा है सरणी भंडारण एक प्रकार से दूसरे करने के लिए फ्लिप करने के लिए पैदा करने के लिए नहीं।

प्रश्न:

क्या एक फास्ट तत्वों रैखिक भंडारण सरणी की तरह लग रहे हैं?

शब्दकोश तत्व हैश टेबल सरणी कैसा दिखता है?

रोकथाम के प्रयोजनों के लिए, मैं "एक प्रकार से दूसरे में फ़्लिप कैसे करूं"?

+0

मुझे लगता है कि रैखिक भंडारण सरणी सिर्फ एकल तत्वों और हैश भंडारण के साथ सामान्य सरणी होगा ऑब्जेक्ट की श्रेणी होगा। –

+1

आलेख * तत्व *, लेकिन * शब्दकोश तत्व * के बारे में बात नहीं करता है। आपने उद्धरण को अच्छी तरह से प्रतिबिंबित नहीं किया है। – trincot

+0

@trincot क्षमा करें कॉपी और गलती। –

उत्तर

10

मैं एक छोटे से इसका उल्टा जाना होगा।

2) Dictionary Elements हैश टेबल ऐरे कैसा दिखता है?

एक जावास्क्रिप्ट ऑब्जेक्ट स्ट्रिंग से मूल्यों का नक्शा है। जैसे

var obj = { 
    "name": "Sherlock Holmes", 
    "address": "221B Baker Street" 
} 

वी 8 हैश तालिकाओं का उपयोग करता है, जब तक कि विशेष मामलों के लिए एक अनुकूलित प्रतिनिधित्व का उपयोग कर वस्तुओं का प्रतिनिधित्व करने के।यह एक शब्दकोश उपयोग (शब्द, अर्थ) जोड़ी की तरह है।

अब, इस हैश तालिका का उपयोग धीमा है क्योंकि शुरुआत में हैश तालिका में सभी कुंजी और मान undefined हैं। एक नई जोड़ी डालने पर, हैश की गणना की जाती है और जोड़ी सम्मिलन सूचकांक में डाली जाती है। अगर उस इंडेक्स में पहले से ही एक कुंजी है, तो अगले एक और इतने पर डालने का प्रयास करें।

1) Fast Elements रैखिक भंडारण ऐरे जैसा दिखता है?

वी 8 में, एक element एक संपत्ति जिसका कुंजी एक गैर नकारात्मक पूर्णांक (0, 1, 2, ...) अर्थात एक सरल रैखिक सरणी जिसका गुण एक संख्यात्मक सूचकांक के माध्यम से पहुँचा जा सकता है है।

फास्ट तत्व एक संगत सरणी में संग्रहीत हैं। जैसे

var arr = [1, 2, 3]; 

वे एक विशेष मामला कि तेजी से पहुँच के लिए अनुकूलित है के रूप में पहले से ही सूचकांक में जाना जाता है और गणना की जा करने के लिए नहीं कर रहे हैं।

3) रोकथाम के प्रयोजनों के लिए, मैं flip from one type to another कैसे करूं?

तेजी से तत्व के लिए, यदि आप तत्व सरणी के अंत से पहले एक इंडेक्स असाइन करते हैं, तो V8 तत्वों को शब्दकोश मोड में डाउनग्रेड कर सकता है।

संदर्भ: http://jayconrod.com/posts/52/a-tour-of-v8-object-representation

+0

मैंने टाइपो को सही किया है। शब्दकोश तत्वों पर। –

+1

उत्तर – User528491

+0

अद्यतन किया गया तत्व तत्वों को हटाएं। यह सरली संक्रमण को धीमे आंतरिक प्रतिनिधित्व में लाएगा। जब कुंजी सेट स्पैस हो जाता है, तो V8 अंततः तत्वों को शब्दकोश मोड में बदल देगा, जो धीमा भी है। https://jsperf.com/packed-vs-holey-arrays –

4

सर मुझे गलत है लेकिन अपने प्रश्न के अनुसार मैं क्या देखा है समझाया

जब हम एक सरणी आरंभ वह आंतरिक रूप से 0,1,2 के रूप में हो जाता है कुंजी .... आदि के रूप में मैं धक्का दिया है हो सकता है सरणी लेकिन सरणी में मूल्य इसके साथ तत्व पर विचार नहीं करता यह

ex : 

var arr = new Array() 

arr[0] = 1 
arr[1] = 2 
arr[2] = "myname"; 
arr['myname'] = nick; 

लेकिन जब मैं arr.length है मैं 3 तो यह सांख्यिक से अलग कुंजी पर विचार नहीं करता मिलता है लेकिन अगर मैं लिखना arr[3] = {myname:'nick'} तो यह यह मानते हैं तत्वों।

आंतरिक रूप से मैं रैखिक सरणी अलग रखने के लिए इसके लिए लग रहा है लगता है '{}'

+0

तो लाइनर एक [0] एक [1] है ... एक [20] जहां हैशटेबल एक ['myname'] = 'निक' होगा? –

+0

कोई भी ['myname'] = निक पर विचार किया जाएगा यदि उसकी ऑब्जेक्ट एक सरणी तत्व नहीं है –

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

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