प्रश्न दो कारणों से उत्तर देना मुश्किल है। सबसे पहले, आधुनिक ब्राउज़र सभी निष्पादित करते समय कोड को भारी और गतिशील रूप से अनुकूलित करते हैं, इसलिए गुणों तक पहुंचने के लिए चुने गए एल्गोरिदम एक ही कोड के लिए अलग हो सकते हैं। दूसरा, प्रत्येक इंजन अलग-अलग एल्गोरिदम और हेरिस्टिक का उपयोग करता है यह निर्धारित करने के लिए कि कौन सी एक्सेस एल्गोरिदम का उपयोग करना है। तीसरा, ईसीएमए विनिर्देश बताता है कि परिणाम क्या होना चाहिए, न कि परिणाम कैसे प्राप्त किया जाता है, इसलिए इस क्षेत्र में इंजनों को नवाचार करने की बहुत सारी स्वतंत्रता है।
यह कहा गया है कि, आपके उदाहरण के अनुसार, जिन सभी इंजनों से मैं परिचित हूं, वे myobject
से foo42
से जुड़े मान को पुनर्प्राप्त करने के लिए हैश तालिका के कुछ रूप का उपयोग करेंगे। यदि आप किसी ऑब्जेक्ट का उपयोग किसी एसोसिएटिव सरणी जैसे जावास्क्रिप्ट इंजन का उपयोग करते हैं तो हैश टेबल का पक्ष लेना होगा। कोई भी नहीं जिसे मैं स्ट्रिंग गुणों के लिए एक पेड़ का उपयोग करने के बारे में जानता हूं। हैश टेबल सबसे खराब मामला ओ (एन) है, सबसे अच्छा मामला ओ (1) और ओ (एन) से ओ (एन) के करीब होना चाहिए यदि कुंजी जनरेटर कोई अच्छा है। प्रत्येक इंजन में एक पैटर्न होगा जिसका उपयोग आप ओ (एन) करने के लिए कर सकते हैं लेकिन यह प्रत्येक इंजन के लिए अलग होगा। एक संतुलित पेड़ सबसे बुरी स्थिति ओ (लॉग एन) की गारंटी देगा, लेकिन इसे संतुलित रखने के दौरान संतुलित पेड़ को संशोधित करना ओ (लॉग एन) नहीं है और हैश टेबल स्ट्रिंग कुंजियों के लिए ओ (लॉग एन) से अधिक बार बेहतर होते हैं और ओ (1) अद्यतन करने के लिए (एक बार जब आप निर्धारित करते हैं कि आपको वही बड़ा-ओ पढ़ा जाता है) यदि तालिका में जगह है (समय-समय पर ओ (एन) तालिका को पुनर्निर्माण करने के लिए, लेकिन टेबल आमतौर पर अंतरिक्ष में दोगुना होता है जिसका अर्थ है कि आप केवल भुगतान करेंगे ओ (एन) तालिका के जीवन के लिए 7 या 8 बार)।
संख्यात्मक गुण विशेष हैं, हालांकि। यदि आप पूर्णांक संख्यात्मक गुणों का उपयोग करके किसी ऑब्जेक्ट तक पहुंचते हैं जिसमें श्रेणी में कम या कोई अंतराल नहीं है, यानी, ऑब्जेक्ट का उपयोग करें जैसे कि यह एक सरणी है, मानों को O (1) एक्सेस के साथ स्मृति के रैखिक ब्लॉक में संग्रहीत किया जाएगा। भले ही आपकी पहुंच अंतराल हो, फिर भी इंजन शायद एक स्पैर सरणी पहुंच में स्थानांतरित हो जाएंगे, जो शायद सबसे खराब होगा, ओ (लॉग एन)।
पहचानकर्ता द्वारा संपत्ति तक पहुंच भी विशेष है। आप की तरह,
myObject.foo42
संपत्ति पहुँच सकते हैं और इस कोड को अक्सर निष्पादित हैं (जो है, इस मामले की गति) और एक या समान वस्तु इस एक या दो मशीन निर्देशों में अनुकूलित किया जा सकता है के साथ। ऑब्जेक्ट्स समान बनाता है जो प्रत्येक इंजन के लिए भी अलग होता है लेकिन यदि वे एक ही शाब्दिक या फ़ंक्शन द्वारा निर्मित होते हैं तो उन्हें समान रूप से माना जाने की अधिक संभावना होती है।
कोई भी इंजन जो जावास्क्रिप्ट बेंचमार्क पर अच्छी तरह से करता है, प्रत्येक ऑब्जेक्ट के लिए समान एल्गोरिदम का उपयोग नहीं करेगा।उन्हें सभी को गतिशील रूप से निर्धारित करना होगा कि ऑब्जेक्ट का उपयोग कैसे किया जा रहा है और तदनुसार एक्सेस एल्गोरिदम समायोजित करने का प्रयास करें।
आप वास्तव में क्या करने की कोशिश कर रहे हैं? यदि आप इतने डेटा क्लाइंट पक्ष को संग्रहीत कर रहे हैं कि आपको चिंता करने की आवश्यकता है कि हैश लुकअप कितना कुशल है, तो आप इसे गलत कर रहे हैं। –
क्या आपने किसी भी कार्यान्वयन के कोड में खोला है, उदा। [वी 8] (https://github.com/v8/v8)? – alex
यहां तक कि तर्क के लिए भी माना जाता है कि मूल वस्तु गुण अक्षम हैं, निश्चित रूप से आपके स्वयं के संस्करण को लागू करना बेहतर नहीं होगा, आपको कुछ मूल संरचना के शीर्ष पर कोड की अपनी परत जोड़नी होगी? – nnnnnn