दिलचस्प पोस्ट
एक विशिष्ट समय-क्षेत्र में सप्ताह के दिन php में कैसे खोजें सी -11 में सिंथेट और _जनर का नमूना उपयोग क्या इंटरनेट एक्सप्लोरर 9 सरणी और ऑब्जेक्ट लाइब्रेल्स के अंत में अतिरिक्त अल्पविराम पर गड़बड़ है? सिंगलटन: इसे कैसे इस्तेमाल किया जाना चाहिए डीजेन्गो प्रोजेक्ट में हेन्डलर कहां सिग्नल चाहिए? ग्रेग में 'के बाद नहीं' के लिए रेगेक्स लुकआहेड जावा विभाजन () विधि अंत में खाली तार स्ट्रिप्स? एक दृश्य में सभी EditTexts प्राप्त करने की विधि उपयोगकर्ता भाषा चुनने पर एप की भाषा को कैसे बदल सकता है? स्ट्रिंग्स में अभिन्न मूल्यों को रूपांतरित करने के 3 आधुनिक सी ++ तरीकों की तुलना करना पायथन में पुनरावर्ती सूची की समझ? सी # कैसे एक घटना को झुका हुआ है खोजने के लिए हेडर-केवल लाइब्रेरी में स्थैतिक डाटा सदस्यों के लिए कैसे है? मैं स्काला स्ट्रीम वर्ग के साथ एक बड़ी सीएसवी फ़ाइल कैसे पढ़ूं? UITextField की शुरुआत में स्थान बनाएं

गहरी क्लोनिंग बनाम आंतरिक एचटीएमएल सेटिंग: क्या तेज है?

मैं ब्राउज़र के भीतर एक DOM पेड़ को गहन क्लोनिंग करने का सबसे शानदार तरीका समझने की कोशिश कर रहा हूं।

यदि मैं इसके साथ शुरू करूं

var div = document.getElementById("source"); var markup = div.innerHTML; 

क्या तेज हो जाएगा,

 var target = div.cloneNode(true); 

या

 var target = document.cloneNode(false); target.innerHTML = markup; 

मैं समझता हूं कि ब्राउज़र प्लेटफ़ॉर्म यहां एक बड़ा अंतर बना सकता है, इसलिए वास्तविक दुनिया में इन की तुलना की जाने वाली किसी भी जानकारी की सराहना की जाएगी।

Solutions Collecting From Web of "गहरी क्लोनिंग बनाम आंतरिक एचटीएमएल सेटिंग: क्या तेज है?"

चलो परीक्षण करें!

मैंने निम्नलिखित कोड को स्टैक ओवरफ्लो के प्रश्न पेज की एक कॉपी में जोड़ा (मौजूदा लिपियों को पहले हटाया गया, और प्रत्येक समय के समय के साथ खरोंच से चल रहा है, प्रत्येक समय लगभग 100 ऑप्स के तीन रनों के बिना,

 function timeit(f) { var start= new Date(); for (var i=100; i-->0;) { f(); } return new Date()-start; } var c= document.getElementById('content'); var clones= []; //alert('cloneNode: '+timeit(function() { // clones.push(c.cloneNode(true)); //})) //alert('innerHTML: '+timeit(function() { // var d= document.createElement('div'); // d.innerHTML= c.innerHTML; // clones.push(d); //})) 

कोर 2 Q9300 पर वर्चुअलबॉक्स पर चल रहे परिणाम यहां दिए गए हैं:

 IE7 cloneNode: 3238, 3235, 3187 innerHTML: 8442, 8468, 8552 Firefox3 cloneNode: 1294, 1315, 1289 innerHTML: 3593, 3636, 3580 Safari3 cloneNode: 207, 273, 237 innerHTML: 805, 818, 786 Chrome1 cloneNode: 329, 377, 426 innerHTML: 2327, 2536, 2865 Opera10 cloneNode: 801, 791, 771 innerHTML: 1852, 1732, 1672 

इसलिए क्लोननोड (सच्चा) आंतरिक HTML कॉपी करने से बहुत तेज है बेशक यह हमेशा होने जा रहा था; पाठ करने के लिए एक DOM को सीरियल करना और फिर एचटीएमएल से पुनः पार्स करना कठिन काम है। कारण DOM चाइल्ड ऑपरेशन आमतौर पर धीमा है कि आप उन्हें एक-एक करके डालने / चल रहे हैं; सब-एक-एक बार DOM परिचालन जैसे क्लोननोड को ऐसा करने की आवश्यकता नहीं है।

सफारी आंतरिक एचटीएमएल को आश्चर्यजनक ढंग से करने का प्रबंधन करता है, लेकिन अभी तक जितनी तेज़ी से क्लोननोड नहीं होता है आईई, जैसा कि अपेक्षित है, एक कुत्ता है

इसलिए, जो कि आंतरिक एचटीएम ने कहा है, सभी के लिए ऑटो -1 सब दौर जाहिर है कि सवाल वास्तव में क्या कर रहा था, इसके बावजूद तेज हो जाएगा।

और हां, jQuery क्लोइन में भीतरी एचटीएमएल का उपयोग करता है। नहीं, क्योंकि यह तेज़ है – स्रोत पढ़ें:

 // IE copies events bound via attachEvent when // using cloneNode. Calling detachEvent on the // clone will also remove the events from the orignal // In order to get around this, we use innerHTML. 

jQuery का उपयोग Element.attachEvent () अपने स्वयं के इवेंट सिस्टम को कार्यान्वित करने के लिए करता है, इसलिए स्वाभाविक रूप से उस बग से बचने की आवश्यकता है। यदि आप की जरूरत नहीं है, तो आप ऊपरी से बच सकते हैं

[ऑफ-थीम को एक तरफ: फिर से, मुझे लगता है कि जेकब अप को सर्वश्रेष्ठ अभ्यास के शिखर के रूप में धारण करना थोड़ा गलत है, खासकर अगली पंक्ति दी गई है:

 html.replace(/ jQuery\d+="(?:\d+|null)"/g, "") 

यह सही है – jQuery का HTML तत्वों के लिए अपनी स्वयं के मनमाना गुण जोड़ता है, और फिर उन्हें छीनने की आवश्यकता होती है जब वे उन्हें क्लोन करते हैं (या अन्यथा उनके मार्कअप तक पहुंच देता है, जैसे $ ()। Html () विधि)। यह बदसूरत पर्याप्त है, लेकिन फिर यह ऐसा करने का सबसे अच्छा तरीका है, जो नियमित अभिव्यक्ति का उपयोग करके HTML का प्रसंस्करण कर रहा है, जो कि आप की तरह की मूल गलती की तरह है, जो कि आपको भोलेदार 1 से अधिक की अपेक्षा करता है-प्रतिष्ठा, दूसरे आने वाले सर्वश्रेष्ठ जेएस के लेखक की तुलना में प्रश्नकर्ता फ्रेमवर्क एवर

आशा है कि आपके स्ट्रिंग "jQuery1 =" 2 "" आपकी पाठ सामग्री में कहीं भी नहीं है, इसलिए यदि आप बस रहस्यमय रूप से इसे खो गए तो धन्यवाद jQuery! इस प्रकार दूर विषय को समाप्त होता है।]

हम्म् … दिलचस्प, मैंने फ़ायरफ़ॉक्स 3 में सिर्फ एक टेस्ट किया है, और एक गहरी क्लोन इंटीरियर एचटीएमएल मार्ग के मुकाबले 3 गुना तेज लगता है।

मुझे विश्वास है कि आंतरिक एचएलएल व्यक्तिगत DOM परिचालनों की तुलना में अभी भी तेज है, लेकिन कम से कम गहरे क्लोनिंग के लिए, क्लोननोड (सच) बेहतर अनुकूलित लगता है।

सामान्य आंतरिक एचटीएमएल में तेजी से है यह देखें, कई प्लेटफार्मों में एक बेंचमार्क :