介紹下重繪和迴流(Repaint & Reflow),以及如何進行優化javascript
知識點:Repaint & Reflowcss
1. 瀏覽器渲染機制html
2. 重繪前端
因爲節點的幾何屬性發生改變或者因爲樣式發生改變而不會影響佈局的,稱爲重繪,例如outline, visibility, color、background-color等,重繪的代價是高昂的,由於瀏覽器必須驗證DOM樹上其餘節點元素的可見性。java
3. 迴流css3
迴流是佈局或者幾何屬性須要改變就稱爲迴流。迴流是影響瀏覽器性能的關鍵因素,由於其變化涉及到部分頁面(或是整個頁面)的佈局更新。一個元素的迴流可能會致使了其全部子元素以及DOM中緊隨其後的節點、祖先節點元素的隨後的迴流。瀏覽器
<body>
<div class="error">
<h4>個人組件</h4>
<p><strong>錯誤:</strong>錯誤的描述…</p>
<h5>錯誤糾正</h5>
<ol>
<li>第一步</li>
<li>第二步</li>
</ol>
</div>
</body>複製代碼
在上面的HTML片斷中,對該段落(緩存
標籤)迴流將會引起強烈的迴流,由於它是一個子節點。這也致使了祖先的迴流(div.error和body – 視瀏覽器而定)。此外,ide
迴流一定會發生重繪,重繪不必定會引起迴流。佈局
4. 瀏覽器優化現代瀏覽器大多都是經過隊列機制來批量更新佈局,瀏覽器會把修改操做放在隊列中,至少一個瀏覽器刷新(即16.6ms)纔會清空隊列,但當你獲取佈局信息的時候,隊列中可能有會影響這些屬性或方法返回值的操做,即便沒有,瀏覽器也會強制清空隊列,觸發迴流與重繪來確保返回正確的值。
主要包括如下屬性或方法:
因此,咱們應該避免頻繁的使用上述的屬性,他們都會強制渲染刷新隊列。5. 減小重繪與迴流
1.CSS
<div>
<a> <span></span> </a>
</div>
<style>
span {
color: red;
}
div > a > span {
color: red;
}
</style>複製代碼
對於第一種設置樣式的方式來講,瀏覽器只須要找到頁面中全部的 span 標籤而後設置顏色,可是對於第二種設置樣式的方式來講,瀏覽器首先須要找到全部的 span 標籤,而後找到 span 標籤上的 a 標籤,最後再去找到 div 標籤,而後給符合這種條件的 span 標籤設置顏色,這樣的遞歸過程就很複雜。因此咱們應該儘量的避免寫過於具體的 CSS 選擇器,而後對於 HTML 來講也儘可能少的添加無心義標籤,保證層級扁平。
2.JavaScript
若是你以爲這篇文章對你挺有啓發,我想請你幫我兩個小忙:
把這篇文章分享給你的朋友 / 交流羣,讓更多的人看到,一塊兒進步,一塊兒成長!
關注公衆號 「IT平頭哥聯盟」,公衆號後臺回覆「資源
」 免費領取我精心整理的前端進階資源教程
JS中文網 - 前端進階資源教程 www.javascriptC.com
一個致力於幫助開發者用代碼改變世界爲使命的平臺,天天均可以在這裏找到技術世界的頭條內容
![JS中文網 - 前端進階資源教程,領略前端前沿,關注IT平頭哥聯盟](https://www.javascriptc.com)