生活随笔
收集整理的這篇文章主要介紹了
前端性能优化总结
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
# 前端性能優(yōu)化
網(wǎng)頁生成過程:
HTML代碼轉(zhuǎn)化成DOMCSS代碼轉(zhuǎn)化成CSSOM(CSS Object Model)結(jié)合DOM和CSSOM,生成一棵渲染樹(包含每個(gè)節(jié)點(diǎn)的視覺信息)生成布局(layout),即將所有渲染樹的所有節(jié)點(diǎn)進(jìn)行平面合成將布局繪制(paint)在屏幕上渲染:耗時(shí)的第四步(生成布局\flow)和第五步(繪制\paint)
重排(reflow)和重繪(repaint)
- 重繪不一定重排(例如僅改變文字顏色)
- 重排一定重繪(例如改變文字位置)
對(duì)于性能的影響
將CSS的讀操作和寫操作分離
提高性能的九個(gè)技巧
同上條。不要在兩個(gè)讀操作之間,加入一個(gè)寫操作。如果某個(gè)樣式是通過重排得到的,那么最好緩存結(jié)果。不要一條條地改變樣式,而要通過改變class,或者csstext屬性,一次性地改變樣式。盡量使用離線DOM,而不是真實(shí)的DOM來改變?cè)貥邮健?- 例如操作Document Fragment對(duì)象,完成后再把這個(gè)對(duì)象加入DOM。
- 例如使用 cloneNode() 方法,在克隆的節(jié)點(diǎn)上進(jìn)行操作,然后再用克隆的節(jié)點(diǎn)替換原始節(jié)點(diǎn)。
先將元素設(shè)為display: none(需要1次重排和重繪),然后對(duì)這個(gè)節(jié)點(diǎn)進(jìn)行100次操作,最后再恢復(fù)顯示(需要1次重排和重繪)。這樣就用兩次重新渲染,取代了可能高達(dá)100次的重新渲染。position屬性為absolute或fixed的元素,重排的開銷會(huì)比較小,因?yàn)椴挥每紤]它對(duì)其他元素的影響。只在必要的時(shí)候,才將元素的display屬性為可見,因?yàn)椴豢梢姷脑夭挥绊懼嘏藕椭乩L。(visibility : hidden的元素只對(duì)重繪有影響,不影響重排。)使用虛擬DOM的腳本庫,比如React等。使用 window.requestAnimationFrame()、window.requestIdleCallback() 這兩個(gè)方法調(diào)節(jié)重新渲染(詳見后文)。window.requestAnimationFrame()*
可以將某些代碼放到下一次重新渲染時(shí)執(zhí)行。
window.requestIdleCallback()*
指定只有當(dāng)一幀的末尾有空閑時(shí)間,才會(huì)執(zhí)行回調(diào)函數(shù)。
轉(zhuǎn)載于:https://www.cnblogs.com/amberheart/p/9544459.html
總結(jié)
以上是生活随笔為你收集整理的前端性能优化总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。