मैंने पहले similar question से पूछा है, लेकिन मैंने कभी भी अपना मुद्दा बिल्कुल स्पष्ट नहीं किया है, या कम से कम मुझे लगता है कि यह एक प्रासंगिक सवाल है कि इसे लाने और यह देखने के लायक है कि कोई भी कुछ अंतर्दृष्टिपूर्ण विचार दे सकता है या नहीं।jQuery क्यों है। यह इतनी धीमी गति से अनुशंसित है?
jQuery का उपयोग करते समय, हम में से कई jQuery.ready
फ़ंक्शन का उपयोग init
निष्पादित करने के लिए करते हैं जब डोम लोड हो जाता है। यह jQuery का उपयोग कर वेब पेज पर डीओएम मैनिपुलेशन प्रोग्राम जोड़ने का डी-फैक्टो मानक तरीका बन गया है। एक संबंधित घटना natively कुछ ब्राउज़र मौजूद है, लेकिन jQuery अन्य आईई संस्करणों जैसे अन्य ब्राउज़रों में इसे अनुकरण करता है। उदाहरण:
<head>
<script>
var init = function() { alert('hello world'); };
$.ready(init);
</script>
अब, हमारे सभी परीक्षण दिखाते हैं कि यह घटना काफी धीमी हो सकती है। यह window.onload
जितना धीमा नहीं है, लेकिन यह अभी भी निष्पादन से पहले लगभग 100 एमएस देरी है। यदि एफएफ 200-300 एमएस तक हो सकता है, खासकर रीफ्रेश पर।
ये कुछ बहुत ही महत्वपूर्ण मिलीसेकंड हैं, क्योंकि यह किसी भी डोम मैनिप्लेशंस (जैसे ड्रॉपडाउन छुपाए जाने से पहले) प्रारंभिक लेआउट दिखाया गया है। कई बार, एक लेआउट "झिलमिलाहट" मुख्य रूप से एक धीमी डोम तैयार घटना का उपयोग करके होता है, जिससे प्रोग्रामर को सीएसएस का उपयोग करके तत्वों को छिपाने के लिए मजबूर किया जाता है और संभावित रूप से इसे कम सुलभ बना दिया जाता है।
<head>
<script>
var init = function() { alert('hello world'); };
</script>
</head>
<body>
<!-- some HTML -->
<script>init();</script>
</body>
एक साधारण परीक्षण पेज:
अब अगर हम यह भी शरीर टैग को बंद करने से पहले एक स्क्रिप्ट टैग में एक init समारोह जगह है, यह बहुत तेजी से, आमतौर पर लगभग आधा समय है लेकिन कभी कभी भी तेजी से निष्पादित किया जाएगा जो मतभेद साबित करता है: http://jsbin.com/aqifon/10
मेरा मतलब है, हम मुश्किल चयनकर्ताओं के बारे में बात नहीं कर रहे हैं क्योंकि कुछ "अनुकूलन पुलिस" प्रभावी चयनकर्ताओं का उपयोग करने के लिए प्रोत्साहित करते हैं। हम कुछ प्रमुख देरी के बारे में बात कर रहे हैं जब डोम मैनिपुलेशन ऑनलोड करते हैं। एफएफ में इस उदाहरण को आजमाकर, डोमरेडी कभी-कभी 100 गुना धीमी (300ms बनाम 2ms) से अधिक हो सकती है।
अब मेरे प्रश्न पर:jQuery.ready
का उपयोग करने की अनुशंसा क्यों की जाती है जब यह स्पष्ट रूप से अन्य विकल्पों को धीमा कर देता है? और jQuery.ready
का उपयोग कर बॉडी बनाम बंद करने से पहले init
पर कॉल करने की क्या कमी है? यह domReady
का उपयोग करने के लिए तर्कसंगत रूप से अधिक "सुरक्षित" है, लेकिन दूसरे संदर्भ की तुलना में यह किस संदर्भ में अधिक सुरक्षित है? (मैं document.write
और स्थगित स्क्रिप्ट जैसे सामान सोच रहा हूं) हमने कई क्लाइंट साइटों पर लगभग 5 वर्षों के लिए BODY
तरीके का उपयोग किया है, और हम कभी भी किसी भी समस्या में भाग नहीं लेते हैं। यह बहुत तेज़ है।
मैं भी सोच रहा हूं, क्योंकि जेएसपीरफ़ के बारे में बहुत अधिक फ़ज़ है और प्रति 10000 निष्पादन के कुछ एमएस के लिए चयनकर्ताओं को अनुकूलित करने के लिए, इस बारे में ज्यादा बात नहीं है? यह मूल रूप से उपयोगकर्ता के सामने पहली देरी है, और यह प्रत्येक पृष्ठ लोड पर 50-100 एमएस टुकड़ा करने के लिए काफी सरल लगता है ...
हाँ, इस तर्क को 'सुविधा' लेबल किया जा सकता है और यह काफी उचित है। आप शायद अपने टेम्पलेट सिलाई के अंत में jQuery.ready बाइंडिंग को ट्रिगर कर सकते हैं ... – David