懶惰加載js或ondemand加載的3種方式與原因有什麼區別?懶加載javascript
腳本1:
$.getScript = function(url, callback, cache){
$.ajax({
type: "GET",
url: url,
success: callback,
dataType: "script",
cache: cache
});
};
SCRIPT2:
function require(file, callback) {
var script = document.getElementsByTagName('script')[0],
newjs = document.createElement('script');
// IE
newjs.onreadystatechange = function() {
if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') {
callback();
}
};
// others
newjs.onload = function() {
callback();
};
newjs.src = file;
script.parentNode.insertBefore(newjs, script);
}
document.getElementById('id').onclick = function() {
require('ondemand.js', function() {
extraFunction('loaded from the parent page');
document.body.appendChild(document.createTextNode('done!'));
});
};
script3:
$L = function (c, d) {
for (var b = c.length, e = b, f = function() {
if (!(this.readyState
&& this.readyState !== "complete"
&& this.readyState !== "loaded")) {
this.onload = this.onreadystatechange = null;
--e || d()
}
}, g = document.getElementsByTagName("head")[0], i = function (h) {
var a = document.createElement("script");
a.async = true;
a.src = h;
a.onload = a.onreadystatechange = f;
g.appendChild(a)
}; b;) i(c[--b])
};
如果你寫了這些函數,我希望你認識到'readyState =='loaded''發生在執行腳本之前,而'* complete''發生在*之後。 – zzzzBov
是的真的......即使我只是解析腳本而不是執行,因爲執行需要比解析更多的時間 – paul