इस प्रश्न पर मेरा ध्यान एक और के बाद गया, जिसे इस एक के डुप्लिकेट के रूप में चिह्नित किया गया था ।
यह उत्तर थोड़े अतिरिक्त विवरण के साथ स्वीकृत उत्तर को सारांशित करता है।
आप एक अनावश्यक जाँच से बचकर अनुकूलन करने का प्रयास कर रहे हैं, इस संबंध में यहाँ वे कारक हैं जिनके बारे में आपको अवश्य पता होना चाहिए:
- जावास्क्रिप्ट के माध्यम से एक डोम तत्व में हेरफेर करने के माध्यम से वर्ग विशेषता में डुप्लिकेट वर्ग के नाम रखना संभव नहीं है। यदि
class="collapse"आपके HTML में है, तो कॉलिंग Element.classList.add("collapse");एक अतिरिक्त पतन वर्ग नहीं जोड़ेगी । मुझे अंतर्निहित कार्यान्वयन का पता नहीं है, लेकिन मुझे लगता है कि यह काफी अच्छा होना चाहिए।
- JQuery इसके
addClassऔर removeClassकार्यान्वयन में कुछ आवश्यक जाँच करता है (मैंने स्रोत कोड की जाँच की )। के लिए addClass, कुछ जांच कर रही है और अगर एक वर्ग मौजूद है JQuery इसे फिर से जोड़ने की कोशिश नहीं कर रहा है के बाद। इसी तरह removeClass, JQuery लाइन के साथ सोमेथिंग करता है, cur.replace( " " + clazz + " ", " " );जो किसी वर्ग को तभी निकालता है जब वह मौजूद होता है।
removeClassव्यर्थ ध्यान देने योग्य, J व्यर्थ के पुन: प्रतिपादन से बचने के लिए इसके कार्यान्वयन में कुछ अनुकूलन करता है । यह इस प्रकार चलता है
...
// only assign if different to avoid unneeded rendering.
finalValue = value ? jQuery.trim( cur ) : "";
if ( elem.className !== finalValue ) {
elem.className = finalValue;
}
...
तो आप जो सबसे अच्छा माइक्रो ऑप्टिमाइज़ेशन कर सकते हैं, वह फंक्शन कॉल ओवरहेड्स और संबंधित कार्यान्वयन जाँच से बचने के उद्देश्य से होगा।
कहते हैं कि आप एक वर्ग को नामित करना चाहते हैं collapse, यदि आप पूरी तरह से नियंत्रण में हैं कि कक्षा कब जोड़ी जाए या निकाली जाए, और यदि collapseकक्षा शुरू में अनुपस्थित है, तो आप निम्नानुसार अनुकूलित कर सकते हैं:
$(document).on("scroll", (function () {
// hold state with this field
var collapsed = false;
return function () {
var scrollTop, shouldCollapse;
scrollTop = $(this).scrollTop();
shouldCollapse = scrollTop > 50;
if (shouldCollapse && !collapsed) {
$("nav .branding").addClass("collapse");
collapsed = true;
return;
}
if (!shouldCollapse && collapsed) {
$("nav .branding").removeClass("collapse");
collapsed = false;
}
};
})());
एक तरफ के रूप में, यदि आप स्क्रॉल स्थिति में परिवर्तन के कारण एक क्लास टॉगल कर रहे हैं, तो आपको स्क्रॉल इवेंट हैंडलिंग को थ्रॉटल करने की अत्यधिक अनुशंसा की जाती है ।
.hasClassकेवल तभी उपयोग करता हूं जब मुझे जांचने की आवश्यकता होती है कि क्या कक्षा मौजूद है, अगर मुझे केवल कक्षा असाइन करने की आवश्यकता है - मैं उपयोग करता हूं.addClass। jQuery डुप्लिकेट नहीं करता है कक्षाएं