getById.getByClassName
बनाम qSA
तुलना के लिए नीचे स्क्रॉल करें! वहाँ
$('.bar', '#foo')
:
अगर हम जो आईडी "foo"
साथ तत्व के अंदर कर रहे हैं वर्ग "bar"
के सभी तत्वों का चयन करना चाहता था, हम इस लिख सकते हैं:
$('#foo .bar')
या इस निश्चित रूप से इसे प्राप्त करने के लिए अन्य विधियां हैं, लेकिन इस प्रश्न के लिए, आइए इन दो तरीकों की तुलना करें।
तो, उपर्युक्त तरीकों में से कौन सा बेहतर प्रदर्शन करता है? (जो कम समय पर अमल करने की जरूरत है?)
मैं इस प्रदर्शन परीक्षण में लिखा है:
(function() {
var i;
console.time('test1');
for(i = 0; i < 100; i++) {
$('#question-mini-list .tags');
}
console.timeEnd('test1');
console.time('test2');
for(i = 0; i < 100; i++) {
$('.tags', '#question-mini-list');
}
console.timeEnd('test2');
})();
आप स्टैक ओवरफ़्लो पर सांत्वना के भीतर से यह निष्पादित करने के लिए शुरू पेज है। मेरे परिणाम हैं:
फ़ायरफ़ॉक्स:
test1: ~ 90ms
test2: ~ 18ms
क्रोम:
test1: ~ 65ms
test2: ~ 30ms
ओपेरा:
test1: ~ 50ms
test2: ~ 100ms
तो फ़ायरफ़ॉक्स और क्रोम में, टी वह दूसरी विधि कई गुना तेज है - जैसा कि मैंने उम्मीद की थी। हालांकि, ओपेरा में स्थिति उलट दी गई है। मुझे आश्चर्य है कि यहाँ क्या हो रहा है।
क्या आप कृपया अपनी मशीन पर परीक्षण चला सकते हैं और समझा सकते हैं कि क्यों ओपेरा अलग-अलग प्रदर्शन करता है?
अद्यतन
मैं इस परीक्षण लिखा है आदेश की जांच करने के लिए कि क्या ओपेरा QSA वास्तव में सुपर फास्ट है में,। जैसा कि यह पता चला है, यह है।
(function() {
var i, limit = 5000, test1 = 'test1', test2 = 'test2';
console.time(test1);
for(i = 0; i < limit; i += 1) {
document.getElementById('question-mini-list').getElementsByClassName('tags');
}
console.timeEnd(test1);
console.time(test2);
for(i = 0; i < limit; i += 1) {
document.querySelectorAll('#question-mini-list .tags');
}
console.timeEnd(test2);
})();
फिर, आपको इस कोड को स्टैक ओवरफ़्लो स्टार्ट-पेज पर कंसोल के भीतर से चलाने के लिए है। मैंने IE9 के लिए फायरबग लाइट बुकमार्कलेट का उपयोग किया (क्योंकि वह ब्राउज़र console.time
लागू नहीं करता है)।
document.getelementById('A').getElementsByClassName('B');
इस विधि को
:
document.querySelectorAll('#A .B');
मैं हर ब्राउज़र में ऊपर स्क्रिप्ट लगातार पांच बार मार डाला गया है
तो, मैं इस विधि की तुलना में।अंकगणित साधन हैं:
(सभी संख्या मिलीसेकेंड में कर रहे हैं।)
तो, पहली विधि का प्रदर्शन काफी परीक्षण किया ब्राउज़रों (16-36ms) में एक ही है। हालांकि, पहली विधि की तुलना में क्यूएसए बहुत धीमी है, ओपेरा में यह वास्तव में तेज़ है!
तो, QSA अनुकूलन संभव है, मुझे आश्चर्य है कि क्या अन्य ब्राउज़र के लिए ...
'test1: 73ms',' test2: 11ms'। ओपेरा एक अजीब ब्राउज़र है, मुझे यकीन नहीं है कि यह क्यों लगी है। – Blender
@ ब्लेंडर कृपया लूप सीमा बढ़ाएं। मेरा लैपटॉप वास्तव में धीमा है, इसलिए मैं 100 के साथ चला गया। 1000 कोशिश करें।('4ms' से छोटे परिणाम विश्वसनीय नहीं हैं ...) –
क्या आपने' document.getElementById ('foo') समेत विचार किया है। पूर्णता के लिए getElementsByClassName ('bar') 'प्राप्त करें? – RobG