什麼是回流?
回流也叫重排(reflow),當頁面中的元素發生影響布局的變化,比如:改變寬高,修改顯示影藏。頁面需要重新布局,就會觸發重排。 簡單的說就是,頁面布局改變,就會觸發重排。
什麼是重繪(repaint)?
頁面中的元素樣式發生改變注意:
每個頁面只要會發生一次重排和重繪。前端效能優化的關鍵在於 減少dom操作 和 減少頁面的重排重繪重排一定會觸發重繪
如何減少頁面重排重繪呢? 想要減少重排重繪還要了解瀏覽器自帶的優化,每個瀏覽器都是聰明的,瀏覽器都有自己的優化操作。每個瀏覽器都有乙個維護佇列,它會把引起重排和重繪的操作放到維護佇列中, 等 維護佇列 中的操作到達一定數量或者到達一定的時間間隔, 瀏覽器就會清空這個維護佇列,進行批量處理,這樣就會減少重排和重繪的次數。 注意:對應一些特殊的獲取操作,為了保證獲取數值的準確性,瀏覽器會提前清空維護佇列,將其提前渲染。
所以想要減少重排和重繪,條件允許一定要減少獲取操作,如:
1 在for迴圈中,盡量不要進行樣式的獲取操作(因為一獲取就會flush(清空)瀏覽器維護的佇列 )這些是減少重排重繪的優化方法。2 盡量少用sytle修改樣式,通過新增class進行一次性修改樣式
3 使用 translate 代替 left/top等,(translate只會觸發重繪,不會引起重排,可以減少一次重排的時間)
4 使用opacity代替visibility,改透明度渲染效率更高
5 使用絕對定位或者固定定位(absolute fixed),脫離文件流不會引起頁面其它盒子的變化
6 將大量需要重排操作的元素,進行display:none ,(專業術語是' 離線處理')
// gpu 是圖形處理器,使用3d屬性可以觸發gpu硬體加速。移動端的優化可以給元素新增 3d屬性(比如 transform: translatez(0)),使用3d屬性可以使手機開啟gpu硬體加速,讓手機可以最高效能的進行渲染。
資源搜尋**大全
關於優化還可以
使用css精靈,減少的張數,或者使用iconfont字型圖示減少ajax請求的次數,使用webpack打包
壓縮/合併js和css**,減少**檔案的個數和體積
關於**排名的優化
京東(jd.com)-**低價、品質保障、配送及時、輕鬆購物!title>
title>
class="logo">
京東a>
h1>
div>
....
在寫html時,使用 div>h1>a 這種結構有優化作用,比如 上面的logo區域,a標籤裡面的字也不要刪除,可以使用text-indent:-99999(首行縮排進行隱藏),這樣做可以啟動搜尋優化,可以使自己的**靠前一點 頁面的回流與重繪
在構建渲染樹的過程中,瀏覽器主要完成了一下工作 前邊通過構造渲染樹,我們將可見dom節點以及它對應的樣式結合起來,可是我們還需要計算他們在裝置視口 viewport 內的準確位置和大小,這個計算的階段就是回流。最終,我們通過構造渲染樹和回流階段,我們知道了哪些節點是可見的,以及可見節點的樣式和具體的...
頁面的重繪與回流
上次在面試中,面試官問了我乙個關於頁面重繪和回流的問題,我解釋的不怎麼好。今天把它整理了一下,又參考了一些其他的文章。參考文章 頁面載入過程 1 瀏覽器將獲取到的html 解析成乙個dom樹,html中的每乙個標籤都是dom樹中的乙個節點,根節點就是document。dom樹中包含了所有的html標...
Web頁面回流與重繪
回流 reflow 當html結構發生變化時,瀏覽器都需要重新計算一遍最新的dom結構,重新對當前頁面進行渲染 重繪 repaint 如果只是改變某個元素的背景色 文字顏色 邊框顏色等,而不影響它周圍或內部布局的屬性,瀏覽器只需重新渲染當前的元素即可 回流是不可避免的,我們可以通過以下的方式減小回流...