2008-11-30 3 views
6

jQuery चयनकर्ता अद्भुत हैं, लेकिन कभी-कभी मैं खुद को उन्हें ऊपर और ऊपर लिखता हूं, और यह थोड़ा परेशान हो जाता है।हमेशा jquery चयनकर्ताओं का उपयोग करें या चर में उन्हें कैश करें?

$('#mybutton').click(function() { 
    $('#message-box').doSomething(); 
    $('#message-box').doSomethingElse(); 
    $('#message-box').attr('something', 'something'); 
}); 

तो अक्सर मैं चर में मेरी वस्तुओं कैश करने के लिए की तरह है:

$('#mybutton').click(function() { 
    var msg = $('#message-box'); 
    msg.doSomething(); 
    msg.doSomethingElse(); 
    // you get the idea 
}); 

वहाँ रहे हैं इन दो पैटर्न के बीच किसी भी पेशेवरों या विपक्ष? कभी-कभी ऐसा लगता है कि चर बनाने के लिए अतिरिक्त काम है, लेकिन कभी-कभी यह मेरी उंगलियों को बहुत अधिक टाइपिंग बचाता है। क्या किसी भी स्मृति चिंताओं के बारे में पता होना चाहिए? चयनकर्ताओं का उपयोग करने के बाद अच्छी तरह से साफ करें, जबकि मेरी बुरी कोडिंग आदतें वर्रों को स्मृति में लंबे समय तक रखती हैं?

यह मुझे रात में नहीं रखता है, लेकिन मैं उत्सुक हूं। धन्यवाद।

संपादित करें: कृपया this question देखें। यह अनिवार्य रूप से एक ही बात पूछता है, लेकिन मुझे जवाब बेहतर पसंद है।

उत्तर

14

आप चाहिए उन्हें श्रृंखला:

$('#mybutton').click(function() { 
    $('#message-box').doSomething().doSomethingElse().attr('something', 'something'); 
}); 

आप फिर से अधिक से अधिक कुछ करने की जरूरत है और कार्यों jQuery वस्तु उन्हें बचाने में वर तेजी से होता है नहीं लौटाते हैं।

+0

निश्चित रूप से यह करने के लिए jQuery तरह से हो रहा है यही कारण है कि उदाहरण के लिए। – ayaz

+0

विशेष रूप से उन्हें एक var में सहेजने और उपयोग के बाद उन्हें हटाने से आपके राम का उपयोग थोड़ा नीचे हो जाता है, क्योंकि $ ('selector') हमेशा एक नई वस्तु बनाता है ... – Guntram

2

मैं कहता हूं इसके लिए जाओ!

मैं आपके जैसा ही काम करता हूं।

यह मेरे कोड को और अधिक पठनीय बनाता है जो मुझे खुश करता है।

3

मैं आमतौर पर उन्हें पिम्स के उत्तर के अनुसार श्रृंखला देता हूं, हालांकि कभी-कभी जब कई संचालन एक साथ किया जाता है, तो चेनिंग पठनीयता के मुद्दों का कारण बन सकती है। उन मामलों में मैं एक चर में चयनित jQuery वस्तुओं को कैश करता हूं।

0

वास्तव में सवाल अधिक जटिल है। क्योंकि चयनकर्ता तार या कैश की गई jQuery चयनकर्ता उदाहरणों नए कार्य में संग्रहित किया जा सकता है() गुण, विभिन्न प्रोटोटाइप काम करता है, नहीं कोड का एक टुकड़ा द्वारा पहुँचा

  1. श्रृंखलन हमेशा संभव नहीं है।

  2. आप दोनों चयनकर्ता तारों और कैश किए गए jQuery चयनकर्ताओं को चेन कर सकते हैं। मुझे लगता है कि चयनकर्ता तारों को 'इस' गुणों के रूप में उपयोग करना चाहिए, लेकिन कैश किए गए चयनकर्ताओं का उपयोग करते समय कम रैम-उपभोग करने वाले कोड को कम करना चाहिए, फिर भी तेज़ी से और अधिक RAM उपभोग करने वाला कोड लाएगा। क्या मैं सही हू?

मैं काफी नया कार्य का एक बहुत() कैश्ड चयनकर्ताओं पर चयनकर्ता तार से गुणों को बदलने के बारे में हूँ, यही कारण है कि मैं पूछ रहा हूँ है।

0

पिम जेगर इस विशिष्ट स्थिति के लिए 100% सही है, लेकिन यह इंगित करने के लिए उपयोगी हो सकता है कि ऐसी स्थितियां हैं जिनमें कैशिंग अधिक उपयुक्त है।

सबसे पहले, हर बार जब आप $ ('कुछ') कहते हैं तो आप एक संपूर्ण jQuery ऑब्जेक्ट को फिर से चालू कर रहे हैं, इसलिए जब भी आप किसी jQuery ऑब्जेक्ट पर एक से अधिक क्रियाएं करने जा रहे हैं तो चेनिंग या कैशिंग को कॉल किया जाता है।

यदि आप बंद करने में जा रहे हैं तो आप ऑब्जेक्ट पर कार्रवाई कर रहे हैं, चेनिंग आपका मित्र है और पिम जेगर का कोड स्पॉट है।लेकिन यदि आप उस ऑब्जेक्ट के कुछ हिस्से का मूल्यांकन करने जा रहे हैं, तो आप उन क्रियाओं और कैशिंग को चेन करने में सक्षम नहीं होंगे, क्योंकि मूल पोस्टर का कोड शो का दूसरा ब्लॉक वास्तव में जाने का तरीका है।

$('#mybutton').click(function() { 
    var msg = $('#message-box'); 
    msg.doSomething(); 
    if (msg.hasClass('.something')) { 
     msg.dosomethingElse(); 
    } 
}); 

दिलचस्प संसाधन: http://jsperf.com/jquery-chaining-vs-caching

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