DOM操作
使用js操作DOM的代價是昂貴的,有一個貼切的比喻,DOM與ECMScript就像兩座小島,而他們之間由一個收費的橋梁連接,ECMScript每次訪問DOM都要“收費”。
所以DOM操作的性能優化有兩點技巧:
- 將運算盡量放在ECMScript一端,減少DOM操作
- 對DOM對象進行緩存
重繪與重排
當DOM中的元素幾何屬性發生變化時,就會發生重排,重排一定會觸發重繪;當元素只是發生樣式變化時,只會觸發重繪。
重排的代價是非常昂貴的。
所以應該盡量避免重排的發生:
- 對同一DOM元素的操作盡量寫在一起,最小化重排的次數
- 不要在會引起重排的語句中穿插需要返回最新布局信息的語句,比如offsetTop、scrollTop、clientTop、getComputedStyle等
- 使用fragment元素,批量操作DOM元素時使之脫離文檔流,操作完之后再一次性加入文檔
- 將需要多次觸發重排的元素的position設置為absolute或fixed,以避免觸發其他元素的重排