原文:《Speeding up JavaScript: Working with the DOM》 作者:KeeKim Heng, Google Web Developer 翻譯:http://www.blogjava.net/emu/archive/2010/03/01/314185.html
在我們開發(fā)互聯(lián)網(wǎng)富應(yīng)用(RIA)時,我們經(jīng)常寫一些javascript腳本來修改或者增加頁面元素,這些工作最終是DOM——或者說文檔對象模 型——來完成的,而我們的實現(xiàn)方式會影響到應(yīng)用的響應(yīng)速度。
DOM操作會導(dǎo)致瀏覽器重解析(reflow),這是瀏覽器的一個決定頁面元素如何展現(xiàn)的計算過程。直接修改DOM,修改元素的CSS樣式,修改瀏 覽器的窗口大小,都會觸發(fā)重解析。讀取元素的布局屬性比如offsetHeithe或者offsetWidth也會觸發(fā)重解析。重解析需要花費計算時間, 因此重解析觸發(fā)的越少,應(yīng)用就會越快。
DOM操作通常要不就是修改已經(jīng)存在的頁面上的元素,要不就是創(chuàng)建新的頁面元素。下面的4種優(yōu)化方案覆蓋了修改和創(chuàng)建DOM節(jié)點兩種方式,幫助你減 少觸發(fā)瀏覽器重解析的次數(shù)。
方案一:通過CSS類名切換來修改DOM
這個方案讓我們可以一次性修改一個元素和它的子元素的多個樣式屬性而只觸發(fā)一次重解析。
需求:
(emu注:原文作者寫到這里的時候腦子顯然短路了一下,把后面的Out-of-the-flow DOM Manipulation模式要解決的問題給擺到這里來了,不過從示范代碼中很容易明白作者真正想描述的問題,因此emu就不照翻原文了)
我們現(xiàn)在需要寫一個函數(shù)來修改一個超鏈接的幾個樣式規(guī)則。要實現(xiàn)很簡單,把這幾個規(guī)則對應(yīng)的屬性逐一改了就好了。但是帶來的問題是,每修改一個樣式 屬性,都會導(dǎo)致一次頁面的重解析。
function selectAnchor(element) { element.style.fontWeight = 'bold'; element.style.textDecoration = 'none'; element.style.color = '#000'; }
解決方案:
要解決這個問題,我們可以先創(chuàng)建一個樣式名,并且把要修改的樣式規(guī)則都放到這個類名上,然后我們給超鏈接添加上這個新類名,就可以實現(xiàn)添加幾個樣式 規(guī)則而只觸發(fā)一次重解析了。這個模式還有個好處是也實現(xiàn)了表現(xiàn)和邏輯相分離。
.selectedAnchor { font-weight: bold; text-decoration: none; color: #000; }
function selectAnchor(element) { element.className = 'selectedAnchor'; }
出處:emu in blogjava
責(zé)任編輯:bluehearts
上一頁 下一頁 加速Javascript:DOM操作優(yōu)化 [2]
◎進入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|