答客問
網友 Adam Lee 在 JavaScript - 程式碼壓縮與最佳化 留言指教,說我的測試程式有問題。因為文章撰寫時間有點久了,也忘了當時有沒有進行測試,那我們就來測試看看吧。
createElement與createDocumentFragment的測試程式碼。
網友 Adam Lee 已準備好一個測試程式 http://jsfiddle.net/z3caE/ 大家可以用不同瀏覽器玩玩看分數如何?
以下是我在本機端的測試程式:
在 body 裡加入:
<div id="msgce"></div>
<div id="msgcdf"></div>
<ul id="ulItem"></ul>
<script>
</script>
在 <script> 裡加入以下測試程式碼:
function TestLiCE(){
var oUL = document.getElementById("ulItem");
for (var i = 0; i <= 20000; i++) {
var oLI = document.createElement("li");
oUL.appendChild(oLI);
oLI.appendChild(document.createTextNode("Item" + i));
}
}
function TestLiCDF(){
var oUL = document.getElementById("ulItem");
var oTemp = document.createDocumentFragment();
for (var i = 0; i <= 20000; i++) {
var oLI = document.createElement("li");
oLI.appendChild(document.createTextNode("Item" + i));
oTemp.appendChild(oLI);
}
oUL.appendChild(oTemp);
}
var divce = document.getElementById("msgce");
var divcdf = document.getElementById("msgcdf");
divce.innerHTML += "CE-LI:"
for (var i =0; i <= 10; i++) {
var s = (new Date).getTime();
TestLiCE();
divce.innerHTML += ((new Date).getTime() - s) + ",";
};
divcdf.innerHTML += "CDF-LI:"
for (var i =0; i <= 10; i++) {
var s = (new Date).getTime();
TestLiCDF();
divcdf.innerHTML += ((new Date).getTime() - s) + ",";
};
TestLiCE函式主要透過 createElement 進行元素的新增。TestLiCDF 函式主要透過 createDocumentFragment 進行元素的新增。另外我加入 10 次迴圈,記錄這 10 次的時間值,可以看出平均值。
createElement與createDocumentFragment的分數?
IE 10 得到的分數是:
Firefox 21 得到得分數是:
Chrome 27 得到的分數是:要跑好久好久。為了讓結果出現,將函式內迴圈的值修改 i <= 2000,得到以下結果:



文章發佈後約 20 來分鐘,Chrome 終於跑完了。
回覆刪除((昏倒...
Sorry,
回覆刪除此文有嚴重錯誤,請參考 http://blog.kkbruce.net/2012/02/javascript_24.html 的留言。