要如何作效率優化呢?因為 JavaScript 是直譯語言,無法透過編譯器加以優化,所以只能從撰寫方式下手。
下面有一個效率很差的例子:
for (var i=0; i<data.length; i++) {
document.getElementById("link").innerHTML += data[i];
document.getElementById("link").hreh += "&" + data[i];
document.getElementById("link").title += data[i] + ",";
document.getElementById("link").className += data[i] + " ";
document.getElementById("link").name += data[i] + "_";
}
當中有幾個影響效率的問題:
- 過渡的使用 getElementById 搜尋 DOM 物件,尤其是在 for 迴圈中
- 大量的存取 length、innerHTML 等成員變數
- 多次的存取 data[i],這跟上一個差不多
這些問題的修改方法:
/*利用暫存變數作處理*/
var temp1='', temp2='', temp3='', temp4='', temp5='';
/*利用 l 紀錄 length 的值,以避免多次存取成員變數*/
for (var i=0,l=data.length; i<l; i++) {
/*利用 d 紀錄 data[i] 的值,以避免多次存取成員變數*/
d = data[i];
temp1 += d;
temp2 += "&" + d;
temp3 += d + ",";
temp4 += d + " ";
temp5 += d + "_";
}
/*利用暫存變數紀錄 DOM 物件*/
var link = document.getElementById("link");
link.innerHTML += temp1;
link.hreh += temp2;
link.title += temp3;
link.className += temp4;
link.name += temp5;
實驗 1000 筆資料的結果:
第 1 個耗時:5625(msec)
第 2 個耗時:47(msec)
展示(demo)
參考來源:
JavaScript loop performance
随時innerHTMLに書き込んだ場合と一括して書き込んだ場合
innerHTMLとinnerText/textContentの速度比較
getElementByID、変数、withによる参照速度比較
シリアルサーチと正規表現の速度比較
1 回應:
写得好。
張貼留言