国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

給頁面渲染時間加速 干掉Dom Level 0 Event

2024-05-06 14:20:23
字體:
來源:轉載
供稿:網友
現在的web應用越來越復雜,需要響應各種各樣的用戶觸發事件,因而也就不可避免的,需要給我們的html頁面上的dom元素增加事件監聽函數.

我們知道給dom元素綁定事件監聽函數的方法有如下3種:
1 : 頁面html:
代碼如下:
<button onclick=”test();”></button>

2: 頁面html:
代碼如下:
<button id=”btn”></button>

Javascript:
代碼如下:
document.getElementById(“btn”).onclick = test;

3: 頁面html:
代碼如下:
<button id=”btn”></button>

Javascript:
代碼如下:
document.getElementById(“btn”).atachEvent(“onclick”,test); //ie

這3種方法的功能效果和差異,大家都了解,在此就不在贅述了,但是這3種方法,對頁面渲染的速度,資源的消耗,卻是有很大不同的.

正文后面的html代碼是一個demo頁面,大家可以用ie瀏覽器打開,通過注釋不同的代碼段,查看頁面運行效果.
可以看到第一種方式的效率是最低的,隨著頁面節點的增多,頁面渲染時間急劇增加,在ie7下運行,大概670ms;
第二種方式明顯好一些,在ie7下,大概250ms
而第三種方式則是最快的方法,也是web前端開發推薦的標準寫法,在ie7下,大概188ms;
然后我們去掉事件綁定的邏輯,發現只渲染dom元素,不綁定事件的時間,僅僅125ms,可見事件綁定的時間消耗還是很大的 ,尤其是第一種方式,也就是Dom Level 0 Event,最為耗時.

另外,大家運行各段代碼的時候,不妨打開任務管理器,找到瀏覽器對應的進程,查看代碼運行時cpu的消耗以及內存的使用.
我們可以看到,Dom Level 0 Event,對cpu的消耗明顯要高很多.

對內存的消耗分析:
重新打開瀏覽器,空白頁面的內存占用量大概是37M,虛擬內存為28M,頁面渲染后:
1 內存使用 54M,虛擬內存41M
2 內存使用44M,虛擬內存31M
3 內存使用44M,虛擬內存31M
可見Dom Level 0 Event對內存的消耗,也遠遠超出了其它方式.
為什么Dom Level 0 Event會這么消耗系統資源呢?對cpu和內存的消耗都遠遠超出了其它方式.我們來做一個簡單分析.

為了便于分析,我們不妨修改一下我們的代碼 <button onclick=”debugger;test();”></button> ,然后運行頁面,在ie的script debugger里我們找到堆棧調用這一項,可以看到有一個anonymos function,這個function是從何而來的呢.原來瀏覽器在對Dom Level 0 Event做綁定的時候,會自動生成一個包含我們的代碼的匿名函數,然后把這個匿名函數綁定到事件.類似于如下方式:
代碼如下:
document.getElementById(“btn”).onclick = function(event){
test();
} ;

而ie瀏覽器又沒有足夠的智能,區分出眾多內部功能完全一致的匿名函數并合并它們的引用,所以導致了隨著dom事件綁定的越來越多,匿名函數的個數也越來越多.因為要聲明數量眾多的事件處理匿名函數,也就不難明白,為什么會消耗如此多的系統資源了.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 京山县| 多伦县| 西和县| 天峻县| 祁连县| 弥勒县| 成安县| 无为县| 沧源| 周宁县| 南部县| 汕尾市| 湾仔区| 邢台县| 萨嘎县| 聂拉木县| 樟树市| 台山市| 和静县| 南阳市| 广昌县| 怀仁县| 盖州市| 甘肃省| 航空| 河池市| 侯马市| 雷山县| 榆树市| 思茅市| 苗栗县| 兴文县| 二手房| 凤凰县| 嘉善县| 集贤县| 葫芦岛市| 阆中市| 巍山| 唐河县| 高邑县|