ControlJS是大牛steve souders的作品,官网:http://stevesouders.com/controljs/
知识点:
①预加载js:
var CJS =CJS || {};
CJS.downloadScript = function(url) {
CJS.dprint("downloading " + url);
if ( CJS.bIE || CJS.bOpera ) { //ie或者 Opera
CJS.downloadScriptImage(url);
}
else {
CJS.downloadScriptObject(url);
}
};
// Download a script as an image.
// This puts it in the browser's cache, but doesn't execute it.
CJS.downloadScriptImage = function(url) {
var img = new Image();
img.onload = function() { CJS.onloadCallback(url); };
img.onerror = function() { CJS.onloadCallback(url); }; // Chrome does onerror (not onload).
img.src = url;
};
// Download a script as an object.
// This puts it in the browser's cache, but doesn't execute it.
// Based on http://www.phpied.com/preload-cssjavascript-without-execution/
CJS.downloadScriptObject = function(url) {
if ( "undefined" === typeof(document.body) || ! document.body ) {
// we need body for appending objects
setTimeout("CJS.downloadScriptObject('" + url + "')", 50);
return;
}
var obj = document.createElement('object');
obj.data = url;
obj.width = 0;
obj.height = 0;
obj.onload = function() { CJS.onloadCallback(url); };
obj.onerror = function() { CJS.onloadCallback(url); };
//CJS.dprint("downloadScriptObject: appending " + url);
document.body.appendChild(obj);
};
②重写document.write
有时候页面会有很多第三方插入广告,拖慢页面的渲染速度,这个时候要考虑重写一下document.write
另参考:http://stylechen.com/rewrite-documentwrite.html
③为什么这个库貌似大家用的比较少?
其一,是定义的时候较为繁琐,这个颇能吓走一部分人
其二,有点致命的是用Image或者Object缓存js和执行js,要分别请求2次,这个对大访问量的网站来说可能是没办法接受的