2010-12-10 11 views
5

मुझे यह महसूस हुआ है कि $('.class:first')$('.class') से तेज़ी से चलता है। तो जब भी मुझे पता है कि सबसेट में केवल .class है, मैंने इसका उपयोग किया है।jQuery चयनकर्ता को अनुकूलित करें: पहले

क्या :first क्वेरी को तेजी से चलाते हैं, या यह अनावश्यक है?

+0

यदि केवल एक '.class' तत्व है, तो इससे कोई फर्क नहीं पड़ता। (* बदतर करने की अधिक संभावना है, इस अर्थ में कि इसे सबकुछ वापस करने के बजाय इसे अतिरिक्त चयन करना होगा *) –

+3

http://jsperf.com/does-first-boost-your-selector – jAndy

+0

@jAndy, धन्यवाद jsperf लिंक। इसके बारे में नहीं पता था। –

उत्तर

4

यह वास्तव में ब्राउज़र पर निर्भर करता है, :first एक सीएसएस चयनकर्ता नहीं है, यह एक jQuery फ़िल्टर है - इसलिए इसके लिए कुछ अतिरिक्त पार्सिंग कार्य की आवश्यकता होती है ... जहां .class स्वयं को मूल ब्राउज़र चयनकर्ता विधि को सौंप दिया जा सकता है (उदाहरण के लिए यहां document.querySelectorAll())।

इनमें से किसी वास्तव में तेजी से होगा:

$('.class').first() 
//or... 
$('.class').eq(0) 
//or fastest: 
$('.class').slice(0, 1) 

... क्योंकि वे मूल कोड को चलाने के तो सिर्फ इतना है कि सेट में पहली प्रविष्टि ले।

+0

मैंने सोचा कि कक्षा में तत्वों को पाने के अलावा, उन पर पुनरावृत्ति करने के अलावा कोई रास्ता नहीं था। मेरी धारणा के लिए कि 'पहला' इसे तेज कर देगा। आप वास्तव में ब्राउज़र चयनकर्ता विधि के साथ सीएसएस चयनकर्ताओं का उपयोग कर सकते हैं? मुझे वास्तव में जेएस पर पढ़ने की जरूरत है। – Znarkus

+0

@Znarkus - yup, कुछ मूल विधियों ने पिछले कुछ वर्षों में पॉप अप किया है, कुछ हद तक इन चयनकर्ता-आधारित ढांचे से प्रेरित है :) और ': first'' के लिए ... जब आप इसके बारे में सोचते हैं, तो इसे * अंतिम * वैसे भी, चूंकि jQuery (या सिज़ल के बजाय) तत्वों को पहले फ़िल्टर करने के लिए अन्य सभी चयनकर्ताओं को लागू करने की आवश्यकता है, * फिर * पहले को चुनें (Sizzle के अंदर एक स्थिति फ़िल्टर के माध्यम से)। –

+0

कूल, लिंक के लिए धन्यवाद! – Znarkus

2

यदि कुछ भी, पार्सिंग और फिर :first पर फ़िल्टर चला रहा है तो इसे धीमा कर देना चाहिए। आप एक ही तत्व के लिए देख रहे हैं, कार्य करें:

$('.class', context).eq(0) 

इस तरह आप context लिए खोज के क्षेत्र को सीमित कर सकते हैं और सिर्फ .eq(0) का उपयोग कर एक (या कोई) आइटम बाहर ले।

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