淺析document.createDocumentFragment()與js效率
document.createDocumentFragment()說白了就是為了節(jié)約使用DOM。每次JavaScript對(duì)DOM的操作都會(huì)改變頁面的變現(xiàn),并重新刷新整個(gè)頁面,從而消耗了大量的時(shí)間。為解決這個(gè)問題,可以創(chuàng)建一個(gè)文檔碎片,把所有的新節(jié)點(diǎn)附加其上,然后把文檔碎片的內(nèi)容一次性添加到document中。
這是我寫的一個(gè)簡(jiǎn)單的測(cè)試頁面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>document.createDocumentFragment()測(cè)試頁面</title>
</head>
<body>
<script type="text/javascript">
var d1 = new Date();
for(var i=0;i<1000;i++)
{
var op=document.createElement("P");
var oText=document.createTextNode("test1");
op.appendChild(oText);
document.body.appendChild(op);
}
var d2 = new Date();
document.write("方法一用時(shí):" + (d2.getTime() - d1.getTime()) + "<br/>");
//---+-----
var d3 = new Date();
var oFrag=document.createDocumentFragment();
for(var i=0;i<1000;i++)
{
var op=document.createElement("P");
var oText=document.createTextNode("test2");
op.appendChild(oText);
oFrag.appendChild(op);
}
document.body.appendChild(oFrag);
//這段代碼中
var d4 = new Date();
document.write("方法二用時(shí):" + (d4.getTime() - d3.getTime()) + "<br/>");
</script>
</body>
</html>
一旦把節(jié)點(diǎn)添加到document.body(或其后的節(jié)點(diǎn))中,頁面就會(huì)立即反映出這個(gè)變化。對(duì)于第一小段程序,運(yùn)行是沒有任何問題的,但問題是它調(diào)用了十次document.body.appendChild(),每次要產(chǎn)生一次頁面刷新,這樣會(huì)產(chǎn)生很多頁面碎片。而第二小段代碼,document.body.appendChild()僅調(diào)用了一次,這意味著只需要進(jìn)行一次頁面的刷新,需要的時(shí)間顯然會(huì)比前面的要少。
我用了三種瀏覽器測(cè)試上面的測(cè)試代碼,大致得出的結(jié)果為:
IE7:
方法一用時(shí):140
方法二用時(shí):125
Firefox:
方法一用時(shí):66
方法二用時(shí):43
Chrome:
方法一用時(shí):35
方法二用時(shí):25
得出的結(jié)果還是和理論上的一致了。
相關(guān)文章
微信小程序開發(fā)自定義tabBar實(shí)戰(zhàn)案例(定制消息99+小紅心)
一定的需求情況下無法使用小程序原生的tabbar的時(shí)候,需要自行實(shí)現(xiàn)一個(gè)和tabbar功能一模一樣的自制組件,下面這篇文章主要給大家介紹了關(guān)于微信小程序開發(fā)自定義tabBar(定制消息99+小紅心)的相關(guān)資料,需要的朋友可以參考下2022-12-12基于mouseout和mouseover等類似事件的冒泡問題解決方法
這篇文章主要介紹了關(guān)于mouseout和mouseover等類似事件的冒泡問題解決方法。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-11-11JS鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)方法
程序開發(fā)人員可以使用一些簡(jiǎn)單的技術(shù)來改進(jìn)自己的代碼編寫工作。你可以寫一些函數(shù)來處理各種常見任務(wù),以節(jié)省時(shí)間;也可以改進(jìn)一下代碼的實(shí)現(xiàn)方式,比如你可以把方法的鏈?zhǔn)秸{(diào)用技術(shù)用到自己所寫的JS庫中,把自己喜歡的方法串起來調(diào)用。2013-03-03用js寫了一個(gè)類似php的print_r輸出換行功能
因?yàn)閜hp的print_r比較好用同時(shí)js卻沒有這個(gè)功能于是自己就寫了一個(gè),感興趣的你可不要錯(cuò)過了哈,希望本文對(duì)你提高知識(shí)有所幫助2013-02-02webpack自動(dòng)打包功能實(shí)現(xiàn)
webpack是前端項(xiàng)目構(gòu)建工具打包工具,本文通過實(shí)例代碼給大家介紹webpack自動(dòng)打包功能實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧2023-02-02javascript經(jīng)典特效分享 手風(fēng)琴、輪播圖、圖片滑動(dòng)
這篇文章主要介紹了javascript經(jīng)典特效,手風(fēng)琴、輪播圖、圖片滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09javascript簡(jiǎn)單實(shí)現(xiàn)等比例縮小圖片的方法
這篇文章主要介紹了javascript簡(jiǎn)單實(shí)現(xiàn)等比例縮小圖片的方法,涉及javascript針對(duì)頁面元素屬性的讀取、運(yùn)算及設(shè)置相關(guān)技巧,需要的朋友可以參考下2016-07-07JavaScript 數(shù)組循環(huán)引起的思考
Google array.js 程序中建議改進(jìn)的代碼。思考為什么i-- 到了 i為0時(shí)while循環(huán)結(jié)束了?2010-01-01