2014-07-25 5 views
13

मैं सिर्फ jQuery के .text() और .html() विधियों के साथ खेल रहा था और some simple jsPFerf tests चला रहा था जब मुझे यह पता चला कि .html() टेक्स्ट को पुनर्प्राप्त करने के लिए लगभग एक तीव्रता तेज है।.html() एक ही उद्देश्य के लिए उपयोग किए जाने पर .text() से बहुत तेज़ क्यों है?

.text().html() से इतना धीमा क्यों है जब परिणाम समान है? .text() क्या ऑपरेशन करता है .html() इस तरह के अंतर के लिए खाते में skips?

(अद्यतन:। के रूप में टिप्पणी में बताया गया है, मुझे पता है कि प्रत्येक विधि एक अलग उद्देश्य है कि, मैं इस मामले में जहां वे ही प्रयोजन के लिए उपयोग किया जाता है के बारे में उत्सुक हूँ)


रुचि रखने वालों के लिए JSPerf आंकड़े:

$div.text() --- 88,496 ops/sec 
$div.html() --- 592,028 ops/sec 
+2

मुझे आशा है कि आप यह नहीं मान रहे हैं कि दोनों कार्य एक ही काम करते हैं: -? –

+0

नहीं, नहीं, नहीं - मुझे उत्सुकता है कि एकमात्र आंतरिक सामग्री टेक्स्ट होने पर इतना बड़ा अंतर क्यों होता है। –

+1

ठीक है, हम यहां इतनी सारी चीज़ें देखते हैं ... :) –

उत्तर

20

यह आवश्यक पार्सिंग की राशि से कोई लेना देना नहीं है। .text() धीमा है क्योंकि इसे आंतरिक HTML को पार्स करना है और किसी भी आंतरिक टैग को बाहर करना है। .html() बस पकड़ लेता है (या, यदि आप सामग्री सेट कर रहे हैं, obliterates) जो कुछ भी है और किया जाता है।

आप the source for .text() here (रेखा 123-144) और the source for .html() here (लाइन 404-441) देख सकते हैं। जब कोई मान प्राप्त हो रहा है (सेटिंग नहीं), .text() में रिकर्सन है, लेकिन .html() एक साधारण return elem.innerHTML; करता है और इसलिए यह बहुत तेज़ है। इसे एक सेटर के रूप में भी उपयोग करना, .html() सरल है।

यह भी ध्यान दें: भले ही आप दोनों सेटर्स के रूप में उपयोग करें और केवल सादा पाठ पास करें, .html() तेज है; जब आप .text() का उपयोग करते हैं तो ब्राउजर को अभी भी elem.nodeType निर्धारित करना होगा। इसे प्रभावी रूप से स्ट्रिंग को पार्स करने की आवश्यकता होती है।

+2

चुनें क्या यह सत्यापित करने के लिए कोई अच्छा स्रोत है? – agconti

+5

आप [.text() 'स्रोत के लिए स्रोत देख सकते हैं (https://github.com/jquery/jquery/blob/c869a1ef8a031342e817a2c063179a787ff57239/src/selector-native.js) (रेखाएं 123-144) और [ '.html()' स्रोत] के लिए स्रोत (https://github.com/jquery/jquery/blob/c869a1ef8a031342e817a2c063179a787ff57239/src/manipulation.js) (रेखाएं 404-441)। जब कोई मान प्राप्त हो रहा है (सेटिंग नहीं), '.text() 'में रिकर्सन है, लेकिन' .html() 'एक सरल' वापसी elem.innerHTML; 'और इसलिए बहुत तेज़ है। इसे एक सेटर के रूप में भी उपयोग करते हुए, '.html() 'सरल है। स्रोत के साथ उतरने के लिए –

+3

+1। बहुत धन्यवाद, एड! –

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

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