2012-05-04 13 views
7

मान लीजिए कि कोई पागल अनुकूलन नहीं है (मैं आपको क्रोम देख रहा हूं)।एचटीएमएल डोम लुकअप की समय जटिलता

मैं कच्चे, गंदे, एक-टूटा-डॉन-फिक्स-इट, यानी v6 जावास्क्रिप्ट, लागत के बारे में बात कर रहा हूं।

निचली सीमा से किया जा रहा:

document.getElementById() 

बनाम:

document.getElementsByTagName('div') lookup. 
+0

यदि आप आईई 6 के लिए अनुकूलित कर रहे हैं, तो मैं आपको 'एंट-टूटा' भाग पर पुनर्विचार करने का आग्रह करता हूं। – robrich

+0

@robrich मैं कुछ भी अनुकूलित नहीं कर रहा हूँ। बस उत्सुक। मैंने सोचा कि i66 'एंट-टूटा' के पीछे कटाक्ष को चिह्नित करेगा। शायद मुझे स्पष्टता के लिए "हवा-उद्धरण" करना चाहिए। –

उत्तर

9

getElementById सुरक्षित रूप से के रूप में एक hashtable के लिए एकदम सही डेटा संरचना है एक आधुनिक ब्राउज़र में O(1) माना जा सकता है आईडी => तत्व मैपिंग।

किसी भी अनुकूलन के बिना किसी भी अनुकूलता के बिना - यह एक सीएसएस चयनकर्ता, एक आईडी लुकअप, एक वर्ग या टैग नाम लुकअप होना - O(n) से भी बदतर नहीं है क्योंकि सभी तत्वों पर एक पुनरावृत्ति हमेशा पर्याप्त है।

हालांकि, एक अच्छे ब्राउज़र में मुझे उम्मीद है कि यह एक टैगनाम => तत्व मैपिंग होगा, इसलिए getElementsByTagNameO(1) भी होगा।

+0

और बिना किसी ऑप्टिमाइज़ेशन के प्राप्त करें एलिमेंट्सबेटागनाम को ओ (एन) भी सर्वोत्तम मामले में होना होगा क्योंकि आखिरी तत्व वह हो सकता है जिसे आप –

+0

खोज रहे हैं, तो क्या इसका मतलब यह है कि ब्राउज़र पढ़ने के लिए अधिकतम प्रत्येक टैग के लिए लिखने पर कई टैग लिखते हैं ? क्या वह थोड़ी अधिक स्मृति गहन नहीं होगी? –

+0

उन मैपिंग का स्मृति उपयोग अप्रासंगिक होगा। यह उदा। से बहुत कम होगा स्मृति में कैश की गई एक छवि (जैसे किसी वेबसाइट पर पृष्ठभूमि छवि)। – ThiefMaster

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