成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

揭露JavaScript DOM操作基本原則

開發(fā) 前端
本文向大家描述一下JavaScript DOM操作基本原則,在Web開發(fā)中,JavaScript的一個很重要的作用就是對DOM進行操作。

我們都知道,JavaScript DOM操作的效率是很低的,而且不是一般的慢,而且這也是引發(fā)性能問題的常見問題之一。為什么會慢呢?因為對DOM的修改為影響網(wǎng)頁的用戶界面,重繪頁面是一項昂貴的操作。

JavaScript DOM操作基本原則

在Web開發(fā)中,JavaScript的一個很重要的作用就是對DOM進行操作,我們都知道,JavaScript DOM操作的效率是很低的,而且不是一般的慢,而且這也是引發(fā)性能問題的常見問題之一。為什么會慢呢?因為對DOM的修改為影響網(wǎng)頁的用戶界面,重繪頁面是一項昂貴的操作。太多的JavaScript DOM操作會導致一系列的重繪操作,為了確保執(zhí)行結(jié)果的準確性,所有的修改操作是按順序同步執(zhí)行的。我們稱這個過程叫做回流(reflow),同時這也是最昂貴的瀏覽器操作之一。回流操作主要會發(fā)生在幾種情況下:

◆當對DOM節(jié)點執(zhí)行新增或者刪除操作時。

◆動態(tài)設(shè)置一個樣式時(比如element.style.width="10px")。

◆當獲取一個必須經(jīng)過計算的尺寸值時,比如訪問offsetWidth、clientHeight或者其他需要經(jīng)過計算的CSS值(在兼容DOM的瀏覽器中,可以通過getComputedStyle函數(shù)獲取;在IE中,可以通過currentStyle屬性獲取)。

解決問題的關(guān)鍵,就是限制通過JavaScript DOM操作所引發(fā)回流的次數(shù)。大部分瀏覽器都不會在JavaScript的執(zhí)行過程中更新DOM。相應(yīng)的,這些瀏覽器將對對DOM的操作放進一個隊列,并在JavaScript腳本執(zhí)行完畢以后按順序一次執(zhí)行完畢。也就是說,在JavaScript執(zhí)行的過程中,用戶不能和瀏覽器進行互動,直到一個回流操作被執(zhí)行。(失控腳本對話框會觸發(fā)回流操作,因為他執(zhí)行了一個中止JavaScript執(zhí)行的操作,此時會對用戶界面進行更新)

如果要減少由于DOM修改帶來的回流操作,有兩個基本的方法。***個就是在對當前DOM進行操作之前,盡可能多的做一些準備工作。一個經(jīng)典的例子就是向document對象中添加很多DOM節(jié)點:

  1. for(vari=0;i<items.length;i++){  
  2. varitem=document.createElement("li");  
  3. item.appendChild(document.createTextNode("Option"+i);  
  4. list.appendChild(item);  

這段代碼的效率是很低的,因為他在每次循環(huán)中都會修改當前DOM結(jié)構(gòu)。為了提高性能,我們需要將這個次數(shù)降到***,對于這個案例來說,***的辦法是建立一個文檔碎片(documentfragment),作為那些已創(chuàng)建元素元素的臨時容器,***一次將容器的內(nèi)容直接添加到父節(jié)點中: 

  1. varfragment=document.createDocumentFragment();  
  2. for(vari=0;i<items.length;i++){  
  3. varitem=document.createElement("li");  
  4. item.appendChild(document.createTextNode("Option"+i);  
  5. fragment.appendChild(item);  
  6. }  
  7. list.appendChild(fragment); 

經(jīng)過調(diào)整的代碼,只會修改一次當前DOM的結(jié)構(gòu),就在***一行,而在這之前,我們用文檔碎片來保存那些中間結(jié)果。因為文檔碎片沒有任何可見內(nèi)容,所以這類修改不會觸發(fā)回流操作。實際上,文檔碎片也不能被添加到DOM中,我們需要將它作為參數(shù)傳給appendChild函數(shù),而實際上添加的不是文檔碎片本身,而是它下面的所有子元素。
避免不必要回流操作的另外一種方法,就是在對JavaScript DOM操作之前,把要操作的元素,先從當前DOM結(jié)構(gòu)中刪除。對于刪除一個元素,基本有兩種方法:

◆通過removeChild()或者replaceChild()實現(xiàn)真正意義上的刪除。

◆設(shè)置該元素的display樣式為“none”。

而一旦修改操作完成,上面這個過程就需要反轉(zhuǎn)過來,將刪除的元素重新添加到當前的DOM結(jié)構(gòu)中,我們還是拿上面的例子來做說明: 

  1. list.style.display="none";  
  2. for(vari=0;i<items.length;i++){  
  3. varitem=document.createElement("li");  
  4. item.appendChild(document.createTextNode("Option"+i);  
  5. list.appendChild(item);  
  6. }  
  7. list.style.display=""

將list的display樣式設(shè)置為“none”后,就將這個元素從當前的DOM結(jié)構(gòu)中刪除了,因為這個節(jié)點不再可視。在將display屬性設(shè)置回之前的默認值之前,向其下添加子元素是不會觸發(fā)回流操作的。

另外一個經(jīng)常引起回流操作的情況是通過style屬性對元素的外觀進行修改。比如下面這個例子: 

  1. element.style.backgroundColor="blue";  
  2. element.style.color="red";  
  3. element.style.fontSize="12em"

【編輯推薦】

  1. 技術(shù)分享 如何獲取Dom元素的X/Y坐標
  2. JQuery創(chuàng)建DOM元素方法解析
  3. JavaScript獲取HTML DOM節(jié)點元素詳解
  4. JavaScript和DOM輕松實現(xiàn)數(shù)據(jù)訪問
  5. 減少瀏覽器重解析 JavaScript DOM操作優(yōu)化方案

 

責任編輯:佚名 來源: school.cnd8.com
相關(guān)推薦

2019-09-18 18:56:34

JavascriptOOP前端

2010-08-12 10:03:21

Flex性能優(yōu)化

2024-04-28 11:32:32

軟件架構(gòu)開發(fā)

2022-10-25 09:50:56

2017-04-17 20:50:50

2021-09-13 10:30:42

C++代碼設(shè)計模式

2010-09-09 13:59:55

CSS

2010-09-08 13:53:31

CSS

2010-09-28 14:52:57

JavaScriptDOM

2015-06-04 10:13:56

DCIM運維管理

2015-06-09 11:08:20

2012-03-06 09:02:41

軟件開發(fā)

2020-01-08 18:27:53

七項基本原則高效漏洞管理IT

2011-04-22 16:17:53

電腦維修

2018-01-07 00:10:39

數(shù)據(jù)中心運營IT

2010-05-21 11:22:04

2010-07-19 15:58:12

面試原則

2011-06-16 13:45:14

2020-01-09 08:55:45

漏洞漏洞管理VM

2010-08-10 09:53:45

Flex性能優(yōu)化
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91在线精品视频 | 亚洲 欧美 综合 | 久久国产精品一区二区三区 | 免费a级毛片在线播放 | 日韩免费在线视频 | 98成人网| 久草网址 | 人人干人人玩 | 伊人一二三 | 欧美日韩中文在线 | 拍拍无遮挡人做人爱视频免费观看 | 九九热在线视频免费观看 | 亚洲欧洲成人在线 | 午夜激情在线视频 | 国产精品18久久久久久久 | 毛片久久久 | 国产精品久久久久久久 | 秋霞电影院午夜伦 | 韩国精品在线 | 97久久久久久久久 | 一区中文字幕 | 超碰男人天堂 | 日韩欧美视频 | av中文网 | 日本三级在线网站 | 国产一区| 精品一区二区三区入口 | 91精品国产乱码久久久久久久久 | 欧美视频精品 | 亚洲精品乱码久久久久久9色 | 久久精品国产免费看久久精品 | 91精品国产91 | 中文字幕三区 | 日韩二三区| 国产精品久久久久无码av | 久久伊人青青草 | 午夜av电影 | 日韩精品无码一区二区三区 | 国产在线拍偷自揄拍视频 | 久久精品国产一区二区三区不卡 | 一区二区视频在线观看 |