प्रारंभिक पृष्ठ लोड की अवधि को कम करने के लिए मैं गतिशील स्क्रिप्ट लोडिंग का उपयोग करता हूं। यह सुनिश्चित करने के लिए कि एक स्क्रिप्ट द्वारा परिभाषित कार्य और वस्तुएं सुलभ हैं, मुझे यह सुनिश्चित करने की आवश्यकता है कि स्क्रिप्ट पूरी तरह से लोड हो गई है।क्या script.ready गतिशील स्क्रिप्ट लोडिंग के अंत का पता लगाने के लिए विश्वसनीय हो सकता है?
मैंने इस अंत में my own Javascript library विकसित किया है, और इस प्रकार इस विषय पर काफी सारे शोध किए हैं, यह अध्ययन करते हुए कि विभिन्न पुस्तकालयों में यह कैसे किया जाता है। इस मुद्दे से संबंधित एक चर्चा के दौरान, केली सिम्पसन, LABjs के लेखक, ने कहा कि:
LABjs (और कई अन्य लोडर) सेट दोनों "ऑनलोड" और "onreadystatechange" सभी स्क्रिप्ट तत्वों पर, यह जानकर कि कुछ ब्राउज़रों एक सक्रिय होगा, और कुछ अन्य सक्रिय कर देगा ...
आप the current version of jQuery as of this writing, v1.3.2 में इस का एक उदाहरण देख सकते हैं:
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function(){
if (!done && (!this.readyState ||
this.readyState == "loaded" || this.readyState == "complete")) {
done = true;
success();
complete();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
यह कला की स्थिति है, लेकिन ओपेरा 9.64 में एक अजीब व्यवहार के विश्लेषण के दौरान, मैं इस निष्कर्ष पर पहुंचा कि, इस तकनीक का उपयोग करके, ऑनलोड कॉलबैक बहुत जल्दी निकाल दिया गया।
मैं इस प्रश्न के उत्तर में अपने स्वयं के निष्कर्ष पोस्ट करूंगा, और समुदाय से और सबूत और प्रतिक्रिया इकट्ठा करना चाहता हूं।
कोई भी jQuery 1.x-master शाखा में वर्तमान कोड का पता लगाता है? ऐसा लगता है कि उन्होंने '.onreadystatechange' और '.onload' का उपयोग करके छोड़ दिया है और उन्हें वादे के साथ बदल दिया है? [क्लिकी] (https://github.com/jquery/jquery/blob/1.x-master/src/ajax.js) – Campbeln