मुझे पता है कि मैं इस धागे के लिए थोड़ा देर हो चुकी हूं, लेकिन मैं सिर्फ यह तथ्य उठाना चाहता था कि डीओएम ऑब्जेक्ट्स की अनावश्यक लपेटना jQuery के खिलाफ सबसे अधिक बार किए गए अपराधों में से एक है। अपने jQuery-उदाहरण के साथ देखभाल करना निर्माण के प्रभावशाली प्रदर्शन हो सकते हैं और यह इतना आसान है कि आपके पास कोई बहाना नहीं है।
आमतौर पर, जब लोगों के पास डोम ऑब्जेक्ट होता है (चाहे इसे संदर्भित किया जाए this
या element
) वे हर बार वे एक jQuery विधि के लिए उपयोग की जरूरत है लपेटो करने की कोशिश करेंगे:
jQuery(this).css('a', 'b');
समस्या यह है जब आप इस कई बार कर रहे हैं:
jQuery(this).css('a', 'b');
jQuery(this).find('span').attr(...);
jQuery(this)....
हर बार jQuery()
कहा जाता है, एक नया jQuery उदाहरण बनाया गया है। इस तरह का ऑपरेशन महंगा है और यदि संभव हो तो इससे बचा जाना चाहिए - खासकर लूप में!
इससे बचने के लिए, आप एक jQuery उदाहरण $(this).css(a,b).attr(a,b)...
लौटने वाले सभी विधियों के साथ चेनिंग का उपयोग कर सकते हैं)। समय के बाकी आप एक स्थानीय रूप से घोषित चर कि jQuery उदाहरण के लिए संदर्भित करता होना चाहिए और उसके बाद सिर्फ इतना है कि का उपयोग करें:
var self = jQuery(this);
self.css(...);
self.attr(...);
आप एक .each()
कॉलबैक फ़ंक्शन के भीतर इस कर रहे हैं, वहाँ अभी भी एक नया jQuery वस्तु है हर एक पुनरावृत्ति पर बनाया जा रहा है। आप एक सामान्य jQuery वस्तु जो आप लगातार उत्परिवर्तित होने से इस से बच सकते हैं और फिर आपको लगता है कि एक उदाहरण बंद jQuery तरीकों से चला सकते हैं: इस पर
देखो:
$('a').each(function(i){
$.single(this).append('Anchor number ' + i);
});
:
jQuery.single = function(a){
return function(b){
a[0] = b;
return a
}
}(jQuery([1]));
अब इसे देखो
केवल एक jQuery ऑब्जेक्ट का उपयोग किया जा रहा है। सोचा के लिए
$_ = $.single;
$('a').each(function(i){
$_(this).append('Anchor number ' + i);
});
खाद्य: आप इसे भी तेजी पहचानकर्ता संकल्प से बचने के लिए कर सकते हैं। अधिक जानकारी यहां: http://james.padolsey.com/javascript/76-bytes-for-faster-jquery/
एक DOM ऑब्जेक्ट को एक jQuery ऑब्जेक्ट – hasen