日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

詳細整理 js優(yōu)化針對IE6.0起作用( 四 )


var but2 = doc.getElementById("but2");
var inputs = doc.getElementsByTagName("input");
var divs = doc.getElementsByTagName("div");
var but1 = doc.getElementById("but1");
var but2 = doc.getElementById("but2");
var inputs = doc.getElementsByTagName("input");
var divs = doc.getElementsByTagName("div");
var but1 = doc.getElementById("but1");
var but2 = doc.getElementById("but2");
var inputs = doc.getElementsByTagName("input");
var divs = doc.getElementsByTagName("div");
}
var end = new Date().getTime();
alert("用時 "(end - start)" 毫秒");
}

上面代碼中,第二種情況是先把全局對象的變量放到函數(shù)里面先保存下來,然后直接訪問這個變量,而第一種情況是每次都遍歷作用域鏈,直到全局環(huán)境,我們看到第二種情況實際上只遍歷了一次,而第一種情況卻是每次都遍歷了,所以我們看看其執(zhí)行結(jié)果:

詳細整理 js優(yōu)化針對IE6.0起作用


從上表中可以看出,其在IE6下差別還是非常明顯的,而且這種差別在多級作用域鏈和多個全局變量的情況下還會表現(xiàn)的非常明顯 。
5、避免雙重解釋
雙重解釋的情況也是我們經(jīng)常會碰到的,有的時候我們沒怎么考慮到這種情況會影響到效率,雙重解釋一般在我們使用eval、new Function和setTimeout等情況下會遇到,我們看看下面的例子:
復(fù)制代碼 代碼如下:
div id="demo"/div
input id="but1" type="button" onclick="func1()" value="https://www.rkxy.com.cn/dnjc/效率低"/
input id="but2" type="button" onclick="func2()" value="https://www.rkxy.com.cn/dnjc/效率高"/
var sum, num1 = 1, num2 = 2;
function func1(){
var start = new Date().getTime();
for(var i = 0; i10000; i){
var func = new Function("sum =num1;num1 =num2;num2;");
func();
}
var end = new Date().getTime();
alert("用時 "(end - start)" 毫秒");
}

function func2(){
var start = new Date().getTime();
for(var i = 0; i10000; i){
sum =num1;
num1 =num2;
num2;
}
var end = new Date().getTime();
alert("用時 "(end - start)" 毫秒");
}

第一種情況我們是使用了new Function來進行雙重解釋,而第二種是避免了雙重解釋,我們看看在不同瀏覽器下的表現(xiàn):
詳細整理 js優(yōu)化針對IE6.0起作用


可以看到,在所有的瀏覽器中,雙重解釋都是有很大開銷的,所以在實際當(dāng)中要盡量避免雙重解釋 。
【詳細整理 js優(yōu)化針對IE6.0起作用】感謝"SeaSunK"對第四點測試報告錯誤的指正,現(xiàn)在已經(jīng)修改過來了 。至于最后一點提出的func1每次都初始化,沒有可比性,所以我給換了eval,結(jié)果發(fā)現(xiàn),在IE6.0下還是有影響,而且在Firefox下,使用eval對效率的影響程度更加厲害,在Firefox下,如果10000次循環(huán),需要十多秒的時間,所以我把循環(huán)都變成了1000次 ??创a和報告 。
復(fù)制代碼 代碼如下:
var sum, num1 = 1, num2 = 2;
function func1(){
var start = new Date().getTime();
for(var i = 0; i1000; i){
eval("sum =num1;num1 =num2;num2;");
}
var end = new Date().getTime();
alert("用時 "(end - start)" 毫秒");
}
function func2(){
var start = new Date().getTime();
for(var i = 0; i1000; i){
sum =num1;
num1 =num2;
num2;
}
var end = new Date().getTime();
alert("用時 "(end - start)" 毫秒");
}

您可能感興趣的文章:一個針對IE7的CSS Hack編寫針對IE的JS代碼兩種編寫方法

推薦閱讀