无阻塞加载javascript,对于页面性能优化有很大的作用,这样能有效的减少js对页面加载的阻塞。特别是一些广告js文件,由于广告内容有可能是富媒体,更是很可能成为你页面加载提速的瓶颈,高性能javascript告诉我们,同学,提升你的网页速度,就无阻塞地加载JS吧。
于是便有一下代码出现。
1
2
3
4
5
6
7
8
|
( function () {
var s = document.createElement( 'script' );
s.type = 'text/javascript' ;
s.async = true ;
s.src = 'http://yourdomain.com/script.js' ;
var x = document.getElementsByTagName( 'script' )[0];
x.parentNode.insertBefore(s, x);
})();
|
上边都是大家熟悉的,看过书的同学都知道这样无阻塞加载的好处,效果挺不错的,当此等无阻塞脚本遇到一般js广告就来了写问题——广告代码出现在HTML里面了却不显示广告。
纳尼?HTML出来了不渲染到页面上?
先看看广告js代码
复制代码 代码如下:
document.write('<img src="http://img.jb51.net/logo_small.gif" js" id="highlighter_386534">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
function LoadADScript(url, container, callback){
this .dw = document.write;
this .url = url;
this .containerObj = ( typeof container == 'string' ?document.getElementById(container):container);
this .callback = callback || function (){};
}
LoadADScript.prototype = {
startLoad: function (){
var script = document.createElement( 'script' ),
_this = this ;
if (script.readyState){ //IE
script.onreadystatechange = function (){
if (script.readyState == "loaded" || script.readyState == "complete" ){
script.onreadystatechange = null ;
_this.finished();
}
};
} else { //Other
script.onload = function (){
_this.finished();
};
}
document.write = function (ad){
var html = _this.containerObj.innerHTML;
_this.containerObj.innerHTML = html + ad;
}
script.src = _this.url;
script.type = 'text/javascript' ;
document.getElementsByTagName( 'head' )[0].appendChild(script);
},
finished: function (){
document.write = this .dw;
this .callback.apply();
}
};
|