2009-03-04 11 views
6

मैं डीओएम में गतिशील रूप से HTML तत्व जोड़ने के लिए विभिन्न विधियों की गति का परीक्षण कर रहा हूं। मैंने एक परीक्षक here बनाया है (कोड वर्किंग वर्जन है, बहुत सुंदर मैला)। परिणाम क्रोम के साथ सभी बिंदुओं को प्राप्त करने वाले विभिन्न ब्राउज़रों के लिए बहुत अलग हैं, और ओपेरा एक अच्छा दूसरा है - लेकिन यह सवाल यहां नहीं है।फ़ायरफ़ॉक्स में आंतरिक HTML = "" धीमा क्यों है

Firefox में मैं एक div समाशोधन (से यह childNodes है) में एक समस्या मिली। जब कुछ 50,000 div तत्व जोड़े जाते हैं, तो केवल

[div].innerHTML = ""; 

का उपयोग करके इसे साफ़ करने में आयु लगती है, यहां क्या हो रहा है? क्या फ़ायरफ़ॉक्स इसके लिए कुछ आंतरिक कचरा संग्रहण विधि लागू करता है?

उत्तर

14

जब मैं innerHTML = "के बारे में निश्चित नहीं हूँ" आप डोम में डालने के लिए DocumentFragments का उपयोग कर एक संभवतः तेज appoach बाहर छोड़ दिया।

ओलाफुर Waage पहले से ही उल्लेख किया है, भले ही innerHTML स्थितियों का एक बहुत में तेजी से यह किसी भी W3C मानक का हिस्सा नहीं है, क्योंकि है, quirks कहीं अधिक तो शुरू किया जाना है, तो वे थे की संभावना है। यह नहीं कहना कि आंतरिक HTML आधुनिक ब्राउज़र के भीतर एक defacto मानक नहीं है।

This blog post संकेत मिलता है कि फ़ायरफ़ॉक्स जब innerHTML का उपयोग कर तत्वों को दूर करने में ही बाद की सफाई बहुत समय खर्च करता है लगता है।

कुछ ब्राउज़रों में (सबसे विशेष, फ़ायरफ़ॉक्स), हालांकि innerHTML आम तौर पर बहुत डोम तरीकों की तुलना में तेजी से होता है, यह समय की आय से अधिक राशि नए लोगों को बनाने बनाम मौजूदा तत्वों बाहर समाशोधन खर्च करता है। यह जानकर, हम आंतरिक HTML का उपयोग करके नए तत्व बनाने के साथ मानक डॉम विधियों का उपयोग करके अपने माता-पिता को हटाकर तत्वों को नष्ट करने की गति को जोड़ सकते हैं।

+0

हां, पूरी तरह से दस्तावेज़फ्रेजमेंट्स को याद किया! नए विचारों को खोलता है, धन्यवाद। ब्लॉग लिंक भी स्पॉट पर है। – KooiInc

+0

पूरी तरह से उस ब्लॉगपोस्ट के बारे में भूल गए। मुझे याद दिलाने के लिये धन्यवाद। –

+0

पुराना सवाल लेकिन मुझे लगता है कि इस लड़के को कॉम्बो विधि के शुरुआती प्रकाशन के लिए क्रेडिट का हकदार है जिसे मैं जानता हूं। यह जेआईटी से सुसज्जित ब्राउज़र के आधुनिक कॉर्प में कम महत्वपूर्ण हो सकता है लेकिन यह अभी तक बहुत अच्छा काम करता है जहां तक ​​मैं कह सकता हूं: http://blog.stevenlevithan.com/archives/faster-than-innerhtml –

2

innerHTML W3C डोम विनिर्देशन का एक हिस्सा नहीं है।

इसे कभी भी तालिका के कुछ हिस्सों को लिखने के लिए उपयोग नहीं किया जाना चाहिए- W3C DOM विधियों का उपयोग इसके लिए किया जाना चाहिए-हालांकि इसका उपयोग संपूर्ण तालिका या सेल की सामग्री को लिखने के लिए किया जा सकता है।

इस संपत्ति के लिए कोई सार्वजनिक विनिर्देश नहीं है, कार्यान्वयन व्यापक रूप से भिन्न होते हैं। उदाहरण के लिए, जब टेक्स्ट इनपुट टेक्स्ट में टेक्स्ट दर्ज किया जाता है, तो IE इनपुट की आंतरिक HTML प्रॉपर्टी के मान विशेषता को बदल देगा लेकिन गीको ब्राउज़र नहीं करता है।

, मानकों का पालन करने के लिए क्रमानुसार या XML पार्स इतनी के रूप में डोम के माध्यम से तत्व सामग्री स्ट्रिंग (रों) के रूप में परिभाषित या हो रही तत्व एक स्ट्रिंग के रूप डोम से प्राप्त सामग्री स्थापित करने के लिए करने के लिए here is one set of JavaScript functions भेंट इच्छुक लोगों के लिए

As John Resig shows:

Source - Mozilla Dev

+0

मैं एक तालिका (का हिस्सा) नहीं लिख रहा हूँ। Testpage विभिन्न विधियों का उपयोग कर, एक कंटेनर div के भीतर 50.000 divs पैदा करता है। आंतरिक HTML = '' के साथ समस्या केवल फ़ायरफ़ॉक्स में होती है और मैं उत्सुक हूं कि इसका कारण क्या है। वैसे भी आपके उत्तर के लिए धन्यवाद। – KooiInc

+0

मुझे लगता है कि उद्धरण आपके प्रश्न का उत्तर ठीक है। "चूंकि इस संपत्ति के लिए कोई सार्वजनिक विनिर्देश नहीं है, कार्यान्वयन व्यापक रूप से भिन्न है।" –

+0

'आंतरिक HTML' को [DOM पार्सिंग] (http://html5.org/specs/dom-parsing.html) spec में परिभाषित किया गया है। – hsivonen

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