|
原文:《Speeding up JavaScript: Working with the DOM》
作者: KeeKim Heng, Google Web Developer
在我們開(kāi)發(fā)互聯(lián)網(wǎng)富應(yīng)用(RIA)時(shí),我們經(jīng)常寫(xiě)一些JavaScript腳本來(lái)修改或者增加頁(yè)面元素,這些工作最終是DOM——或者說(shuō)文檔對(duì)象模型——來(lái)完成的,而我們的實(shí)現(xiàn)方式會(huì)影響到應(yīng)用的響應(yīng)速度。
DOM操作會(huì)導(dǎo)致瀏覽器重解析(reflow),這是瀏覽器的一個(gè)決定頁(yè)面元素如何展現(xiàn)的計(jì)算過(guò)程。直接修改DOM,修改元素的CSS樣式,修改瀏覽器的窗口大小,都會(huì)觸發(fā)重解析。讀取元素的布局屬性比如offsetHeight或者offsetWidth也會(huì)觸發(fā)重解析。重解析需要花費(fèi)計(jì)算時(shí)間,因此重解析觸發(fā)的越少,應(yīng)用就會(huì)越快。
DOM操作通常要不就是修改已經(jīng)存在的頁(yè)面上的元素,要不就是創(chuàng)建新的頁(yè)面元素。下面的4種優(yōu)化方案覆蓋了修改和創(chuàng)建DOM節(jié)點(diǎn)兩種方式,幫助你減少觸發(fā)瀏覽器重解析的次數(shù)。
方案一:通過(guò)CSS類名切換來(lái)修改DOM
這個(gè)方案讓我們可以一次性修改一個(gè)元素和它的子元素的多個(gè)樣式屬性而只觸發(fā)一次重解析。
需求:
(emu注:原文作者寫(xiě)到這里的時(shí)候腦子顯然短路了一下,把后面的Out-of-the-flow DOM Manipulation模式要解決的問(wèn)題給擺到這里來(lái)了,不過(guò)從示范代碼中很容易明白作者真正想描述的問(wèn)題,因此emu就不照翻原文了)
我們現(xiàn)在需要寫(xiě)一個(gè)函數(shù)來(lái)修改一個(gè)超鏈接的幾個(gè)樣式規(guī)則。要實(shí)現(xiàn)很簡(jiǎn)單,把這幾個(gè)規(guī)則對(duì)應(yīng)的屬性逐一改了就好了。但是帶來(lái)的問(wèn)題是,每修改一個(gè)樣式屬性,都會(huì)導(dǎo)致一次頁(yè)面的重解析。
function selectAnchor(element) {
element.style.fontWeight = 'bold';
element.style.textDecoration = 'none';
element.style.color = '#000';
}
it知識(shí)庫(kù):加速JavaScript:DOM操作優(yōu)化,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。