2011-02-16 24 views
6

अधिकार तो मुझे लगता है कि सामान्य ज्ञान तत्व आप एक बहुत तक पहुँचने करने जा रहे हैं के लिए, सबसे अच्छा तरीका उन्हें इतना की तरह कैश करने के लिए है:jQuery/जावास्क्रिप्ट कैशिंग तत्व?

var myEl = $('.myclass'); 

और फिर आप सिर्फ $ उपयोग कर सकते हैं (myEl) भविष्य में और आपको फिर से डोम को खोजने की ज़रूरत नहीं है, सही? ठीक है कहता है कि मेरे पास एक जटिल जटिल एचटीएमएल संरचना है जहां मुझे 20-30 की तरह कई अलग-अलग तत्वों तक पहुंचने की आवश्यकता है। यह इस तरह की चीज 30 गुना करने के लिए बहुत बदसूरत है!

var elA = $('.myela'), 
    elB = $('.myelb'); 

आदि आदि, तो आप अंदाजा हो .. तो वहाँ कुछ भी "बुरा" इस तरह यह करने में, उन सभी तत्वों पर एक ही कक्षा रखने के लिए, लेकिन उन्हें एक अद्वितीय आईडी देना है, तो ऐसा करते हैं:

var myElementObject={}; 
$('.myelems').each(function(){ 
    myElementObject[$(this).attr('id')] = $(this); 
}); 

इस तरह यह है कि मैं एक object.whateverId हो और कैश की गई तत्व thats, इसलिए अब मैं उन्हें के रूप में मैं डोम हर समय फिर से पूछे बिना उपयोग कर सकते हैं,, यह धारणा सही है कि यह एक बुरा है अभ्यास? आप लोग इसके बारे में कैसे जाते हैं?

धन्यवाद!

उत्तर

3

यदि आप आईडी को असाइन करने जा रहे हैं, तो $('#id') का उपयोग करें क्योंकि यह getElementById का उपयोग करता है जो बहुत तेज़ है और शायद उन्हें किसी ऑब्जेक्ट हैश में डालने से बहुत धीमा नहीं है।

इसके अलावा इन तत्वों के लिए एक आम वर्ग को लागू करने या उन्हें किसी अन्य तरीके से समूहीकरण ताकि आप कैश कर सकते $('.mycommonclass')

+0

वास्तव में मैं ".myelems" के साथ क्या कर रहा हूं, जो कि मेरे विवरण में सामान्य वर्ग होगा, लेकिन हाँ अगर $ ('# id') इतना तेज़ है, तो लोग "सर्वोत्तम" प्रथाओं और "हमेशा" अपने तत्व कैश करें? यह वह चीज है जो मुझे नहीं मिलती है, क्या मुझे हमेशा उन तत्वों को कैश करना चाहिए जिन्हें मैं बहुत उपयोग करता हूं या परेशान नहीं करता? क्या यह वास्तव में प्रदर्शन को बहुत प्रभावित करता है? मैं वास्तव में उस पर _clear_ उत्तर नहीं ढूंढ सकता। – neph

+0

@nepth मैं आमतौर पर कैश आइटम करता हूं अगर मैं कहा गया आइटम पर बहुत सारे ऑपरेशन करने जा रहा हूं। उदाहरण के लिए यदि मैं एक ही लूप में एक ही आइटम तक पहुंचने वाला हूं। यदि आप उन्हें कई बार उपयोग करने जा रहे हैं तो कम/प्रदर्शन करने वाले प्रश्न जैसे माता-पिता/सीएसएस आधारित प्रश्नों को कैश करने का भी एक अच्छा विचार है। हालांकि, वैश्विक स्तर पर प्रश्नों को कैश नहीं करना चाहिए। – Vadim

+0

हाँ मुझे लगता है कि समझ में आता है! – neph

0

यदि आप सुनिश्चित हैं कि आप इन तत्वों तक पहुंचने जा रहे हैं तो यह करने का एक अच्छा तरीका है (अन्यथा यह संसाधन बर्बाद हो जाएगा)। एक और छोटी बात यह है कि myEl का उपयोग करके $(myEl) का उपयोग करके $(myEl) को फ़ंक्शन (jQuery) निष्पादित करने के बाद से आप अपने पहले उदाहरण में तत्व तक पहुंच सकते हैं।

+1

वास्तव में, यह क्योंकि 'myEl' पहले से ही एक jQuery वस्तु में लपेटा जाता है है पर विचार करें। आपको इसे दो बार करने की ज़रूरत नहीं है। –

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