2011-09-10 19 views
15

जावास्क्रिप्ट संपत्ति पहुंच (वर्तमान कार्यान्वयन पर) की प्रदर्शन विशेषताओं क्या हैं?जावास्क्रिप्ट बड़े-ओ संपत्ति का उपयोग प्रदर्शन

  • क्या यह सुनिश्चित करने के लिए सुरक्षित है कि ओ (1) है?
  • यदि मैं किसी ऑब्जेक्ट का उपयोग हैश तालिका (स्ट्रिंग कुंजियों के साथ) के रूप में करता हूं, तो क्या मैं सुरक्षित रूप से ओ (1) या ओ (लॉग एन) एक्सेस टाइम मान सकता हूं?

  • क्या कोई सामान्य ब्राउज़र या वातावरण हैं जो दूसरों की तुलना में काफी तेज़/धीमे हैं और मुझे नजर रखना चाहिए?

  • क्या जावास्क्रिप्ट मानकों के पास कुछ कहना है?

और सबसे महत्वपूर्ण बात:

  • मैं कहाँ asymptotic जावास्क्रिप्ट प्रदर्शन के मुद्दों के इस प्रकार के लिए अच्छा संदर्भ मिल सकती है?
+0

आपने अपने द्वारा किए गए शोध में से किसी भी प्रश्न के बारे में आपको क्या बताया है? –

+2

मैं अपने आप पर कुछ शोध नहीं करना चाहता हूं कि ए) मैं शायद वैसे भी गलत हो जाऊंगा और बी) इस विषय पर मुझे पहले से किसी और के द्वारा किया गया है। – hugomg

+0

अद्यतन: [क्या ऐसी कोई चीज है जो जावास्क्रिप्ट में किसी ऑब्जेक्ट की संपत्ति तक पहुंचने के लिए निरंतर समय की गारंटी देती है?] (Http://stackoverflow.com/q/34292087/1048572) – Bergi

उत्तर

6

जावास्क्रिप्ट में प्रत्येक ऑब्जेक्ट को ऑब्जेक्ट हैश के रूप में कार्यान्वित किया जाता है, इसलिए कोई कार्यात्मक अंतर नहीं होता है।

उदाहरण के लिए, इस परीक्षण की जाँच:

var arr = []; 
arr[5] = 5; 
arr['5'] = 'not 5'; 
console.log(arr.length, arr); 
// output: 6 [undefined, undefined, undefined, undefined, undefined, "not 5"] 

नंबर जब स्थिति के रूप में इस्तेमाल stringified कर रहे हैं।

अधिक जानकारी के लिए Crockford's website के बारे में जावास्क्रिप्ट के बारे में देखें। विशेष रूप से महत्वपूर्ण हिस्सा शीर्षक "सरणी" किया जा रहा है:

Arrays in JavaScript are also hashtable objects.

प्रदर्शन जब तक आप वस्तुओं की एक टन का ट्रैक (जैसे 500,000+) रखने के लिए एक मुद्दा वास्तव में नहीं है, इस स्थिति में आप ' शायद कुछ गलत कर रहे हैं।

अनुकूलन आप कर सकते हैं, लेकिन वे वास्तव में तब तक समझ में नहीं आते जब तक आप जावास्क्रिप्ट के साथ कुछ अप्राकृतिक नहीं कर रहे हैं (जैसे संपीड़न एल्गोरिदम ... मैंने जेएस में एक एलजेएमए कार्यान्वयन पर काम किया ... बुरा विचार)।

नोट:

आप एक अतिरिक्त सेट किया हुआ है (जैसे आप 10,000 में से केवल 10 अनुक्रमणिका परिभाषित), तो आप शायद एक नियमित रूप से वस्तु का उपयोग कर किया जाना चाहिए। Arrays सभी 10,000 इंडेक्स को 'अपरिभाषित' में प्रारंभ करेंगे, जबकि Object.keys(obj) केवल आपके द्वारा सेट किए गए 10 की रिपोर्ट करेगा। यह एक मामूली अनुकूलन है जो वास्तव में समझ में आता है।

+1

मुझे पता है कि ऑब्जेक्ट्स और एरे कैसे व्यवहार करते हैं, लेकिन मैं वास्तव में जानना चाहते हैं कि बड़ी संख्या में क्या होता है। आपको शायद 500000 तक जाने की आवश्यकता नहीं होगी - अगर कुछ ओ (एन^2) हो जाता है तो चिंता करने के लिए बस कुछ हज़ार पर्याप्त होना चाहिए। – hugomg

+2

लिंक पढ़ें। Arrays हैश टेबल हैं। इसका मतलब है कि यह लुकअप के लिए शायद ओ (लॉगन) है (वहां बहुत सारे अनुकूलन हैं)।मेरे सहकर्मी ने कुछ परीक्षण चलाए, और पाया कि यह तब तक महत्वपूर्ण नहीं था जब तक आप 50,000 से ऊपर या कुछ और बड़ा नहीं हो जाते। – tjameson

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