兩種方式實現加速Javascript DOM操作最佳化(1)

來源:互聯網
上載者:User

你對加速Javascript DOM操作最佳化的方法是否熟悉,在我們開發互連網富應用RIA)時,我們經常寫一些javascript指令碼來修改或者增加頁面元素,這些工作最終是DOM——或者說文件物件模型——來完成的,而我們的實現方式會影響到應用的響應速度。

加速Javascript DOM操作最佳化

在我們開發互連網富應用RIA)時,我們經常寫一些javascript指令碼來修改或者增加頁面元素,這些工作最終是DOM——或者說文件物件模型——來完成的,而我們的實現方式會影響到應用的響應速度。

Javascript DOM操作會導致瀏覽器重解析(reflow),這是瀏覽器的一個決定頁面元素如何展現的計算過程。直接修改DOM,修改元素的CSS樣式,修改瀏覽器的視窗大小,都會觸發重解析。讀取元素的布局屬性比如offsetHeithe或者offsetWidth也會觸發重解析。重解析需要花費計算時間,因此重解析觸發的越少,應用就會越快。

Javascript DOM操作通常要不就是修改已經存在的頁面上的元素,要不就是建立新的頁面元素。下面有兩種最佳化方案,大致覆蓋了修改和建立DOM節點兩種方式,協助你減少觸發瀏覽器重解析的次數。

方案一:通過CSS類名切換來修改DOM

這個方案讓我們可以一次性修改一個元素和它的子項目的多個樣式屬性而只觸發一次重解析。

需求:

emu註:原文作者寫到這裡的時候腦子顯然短路了一下,把後面的Out-of-the-flowDOMManipulation模式要解決的問題給擺到這裡來了,不過從示範代碼中很容易明白作者真正想描述的問題,因此emu就不照翻原文了)

我們現在需要寫一個函數來修改一個超連結的幾個樣式規則。要實現很簡單,把這幾個規則對應的屬性逐一改了就好了。但是帶來的問題是,每修改一個樣式屬性,都會導致一次頁面的重解析。

 
  1. functionselectAnchor(element){  
  2. element.style.fontWeight='bold';  
  3. element.style.textDecoration='none';  
  4. element.style.color='#000';  

解決方案:

要解決這個問題,我們可以先建立一個樣式名,並且把要修改的樣式規則都放到這個類名上,然後我們給超連結添加上這個新類名,就可以實現添加幾個樣式規則而只觸發一次重解析了。這個模式還有個好處是也實現了表現和邏輯相分離。

 
  1. .selectedAnchor{  
  2. font-weight:bold;  
  3. text-decoration:none;  
  4. color:#000;  
  5. }  
  6.  
  7. functionselectAnchor(element){  
  8. element.className='selectedAnchor';  
  9. }  
  10.  

介紹了加速Javascript DOM操作最佳化的方案一,下面來看一下方案二。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.