javascript性能優(yōu)化之DOM交互操作實(shí)例分析
本文實(shí)例講述了javascript性能優(yōu)化之DOM交互操作技巧。分享給大家供大家參考,具體如下:
在javascript各個(gè)方面,DOM毫無(wú)疑問(wèn)是最慢的一部分。DOM操作與交互要耗費(fèi)大量時(shí)間,因?yàn)樗鼈兺枰匦落秩菊麄€(gè)頁(yè)面或者某一部分。理解如何優(yōu)化與DOM的交互可以極大提高腳本完成的速度。
1、最小化DOM更新
看下面例子:
var list = document.getElementById("ul");
for (var i=0; i < 10; i++){
var item = document.createELement("li");
item.appendChild(document.createTextNode("item" + i));
list.appendChild(item);
}
//這段代碼為列表添加10個(gè)項(xiàng)目。添加每個(gè)項(xiàng)目時(shí),都有兩次DOM更新。總共需要20次DOM更新。
我們可以使用 文檔碎片 來(lái)最小化DOM更新。
var list = document.getElementById("ul");
var fragment = document.createDocumentFragment();
for (var i=0; i < 10; i++){
var item = document.createELement("li");
item.appendChild(document.createTextNode("item" + i));
fragment.appendChild(item);
}
list.appendChild(fragment);
更多關(guān)于 文檔碎片,詳見(jiàn)之前文章 《JavaScript文檔碎片操作實(shí)例分析》
2、使用innerHTML
對(duì)于比較大的DOM更改,使用innerHTML要比createElement()和appendChild()快。
var list = document.getElementById("ul");
var html = "";
for (var i=0; i < 10; i++){
html += "<li>item" + i + "<li>";
}
list.innerHTML = html;
3、使用事件委托
詳見(jiàn)之前文章 《javascript性能優(yōu)化之事件委托實(shí)例詳解》
4、注意NodeList
最小化訪問(wèn)NodeList的次數(shù)可以極大的改進(jìn)腳本的性能,因?yàn)槊看卧L問(wèn)NodeList,都會(huì)運(yùn)行一次基于文檔的查詢(xún)。
var imgs = document.getElementsByTagName("img");
for (var i=0, len=imgs.length; i < len; i++){
var image = imgs[i];
//more code
}
//這里的關(guān)鍵是長(zhǎng)度length存入了len變量,而不是每次都去訪問(wèn)NodeList的length屬性。當(dāng)在循環(huán)中使用NodeList的時(shí)候,把imgs[i]放入image變量中,以避免在循環(huán)體內(nèi)多次調(diào)用NodeList;
更多關(guān)于 NodeList,詳見(jiàn)之前文章 《在javascript將NodeList作為Array數(shù)組處理的方法》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
js內(nèi)置對(duì)象 學(xué)習(xí)筆記
今天系統(tǒng)的學(xué)了一下javascript的內(nèi)置對(duì)象。2011-08-08
js獲取數(shù)組對(duì)象中的全部key和value值
本文主要介紹了js獲取數(shù)組對(duì)象中的全部key和value值,主要使用JavaScript的?map()?函數(shù)和?values()?迭代器來(lái)實(shí)現(xiàn)取出數(shù)組對(duì)象的所有key值和value值,感興趣的可以了解下2024-01-01
通過(guò)網(wǎng)頁(yè)查看JS源碼中漢字顯示亂碼的解決方法
這篇文章給大家主要介紹了通過(guò)網(wǎng)頁(yè)查看JS源碼的時(shí)候,發(fā)現(xiàn)漢字顯示是亂碼的解決方法,文中通過(guò)圖文詳解的介紹了解決的步驟,詳細(xì)會(huì)對(duì)大家很有幫助,有需要的朋友們下面來(lái)一起看看吧。2016-10-10
JS實(shí)現(xiàn)拖動(dòng)模態(tài)框案例
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)拖動(dòng)模態(tài)框案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
使用純前端JavaScript實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出方法過(guò)程詳解
這篇文章主要介紹了使用純前端JavaScript實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出方法過(guò)程詳解,文章通過(guò)示例代碼和圖文解析介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

