2011-10-09 17 views
38

मैं सिर्फ इस सवाल पढ़ें: are there dictionaries in javascript like python?प्रदर्शन आपत्ति

जवाब में से एक ने कहा कि आप अजगर शब्दकोशों की तरह जावास्क्रिप्ट वस्तुओं का उपयोग कर सकते हैं। क्या यह सच है? किसी ऑब्जेक्ट में एक मुख्य लुकअप का प्रदर्शन क्या है? क्या यह ओ (1) है? ऑब्जेक्ट में एक कुंजी भी स्थिर समय (हैशिंग) जोड़ रहा है?

उत्तर

46

V8 design docs मतलब लुकअप कम से कम इस तेजी से, नहीं तो तेजी से हो जाएगा:

अधिकांश जावास्क्रिप्ट इंजन वस्तु गुण के लिए भंडारण के रूप में एक शब्दकोश की तरह डेटा संरचना का उपयोग करें - प्रत्येक संपत्ति का उपयोग एक की आवश्यकता है स्मृति में संपत्ति के स्थान को हल करने के लिए गतिशील लुकअप। यह दृष्टिकोण जावास्क्रिप्ट में गुणों को एक्सेस करने में आम तौर पर प्रोग्रामिंग भाषाओं जैसे जावा और स्मॉलटॉक में उदाहरण चरों तक पहुंचने से धीमा हो जाता है। इन भाषाओं में, आवृत्ति चर को ऑब्जेक्ट की कक्षा द्वारा निर्धारित निश्चित ऑब्जेक्ट लेआउट के कारण संकलक द्वारा निर्धारित निश्चित ऑफसेट पर स्थित हैं। एक्सेस केवल मेमोरी लोड या स्टोर का मामला है, अक्सर केवल एक ही निर्देश की आवश्यकता होती है।

जावास्क्रिप्ट गुणों तक पहुंचने के लिए आवश्यक समय को कम करने के लिए, V8 गुणों तक पहुंचने के लिए गतिशील लुकअप का उपयोग नहीं करता है। इसके बजाए, वी 8 गतिशील रूप से दृश्यों के पीछे छिपा वर्ग बनाता है। [...] वी 8 में, एक ऑब्जेक्ट बदलता है जब इसकी एक नई संपत्ति जोड़ दी जाती है।

ऐसा लगता है कि छिपी कक्षा निर्माण के कारण, एक नई कुंजी थोड़ा धीमा हो सकता है।

+0

धन्यवाद डोमिनिक! इसलिए यदि मैं हैशिंग से अधिक लुकअप कर रहा हूं तो ऑब्जेक्ट लुकअप को डिक्शनरी लुकअप के रूप में उपयोग करना मेरे लिए सुरक्षित लगता है। –

+0

वी 8 के लिए, क्या यह सच है कि गतिशील लुकअप का उपयोग डॉट नोटेशन के साथ-साथ स्क्वायर ब्रैकेट नोटेशन दोनों के लिए नहीं किया जाता है? –

15

हां, आप मान सकते हैं कि एक कुंजी जोड़कर, और बाद में इसका उपयोग करने के लिए इसका उपयोग प्रभावी ढंग से निरंतर समय संचालन है।

हुड के तहत जेएस इंजन बाद के लुकअप को अनुकूलित करने के लिए कुछ तकनीकों को लागू कर सकता है, लेकिन किसी भी एल्गोरिदम के प्रयोजनों के लिए, आप ओ (1) मान सकते हैं।

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