前端性能優(yōu)化-渲染優(yōu)化

一、瀏覽器渲染原理和關(guān)鍵渲染路徑

瀏覽器渲染原理:
讀取html,css文本与斤,構(gòu)建DOM樹。(DOM ,CSSOM)- DOMtree
關(guān)鍵渲染路徑:
javascript(觸發(fā)視覺變化) - style(樣式計(jì)算撩穿,css改變) - Layout(布局)- Paint(繪制)- Composite(合層)

二磷支、 回流與重繪, 如何避免布局抖動(dòng)

布局關(guān)心的是位置和大小。(如css:height食寡,offset改變位置雾狈,大小)抵皱,所以如果只是更改background善榛,opcity,不需要Layout(布局)呻畸,只需Paint(重繪)移盆。

回流:首次加載叫布局。再次叫回流伤为。影響回流的操作:
1咒循、 添加/刪除 元素
2、 操作styles钮呀,display:none
3剑鞍、 offsetLeft昨凡,offsetTop 爽醋,scrollTop,clientWidth便脊。使用這些屬性蚂四,會(huì)引起強(qiáng)制布局更新
4、 移動(dòng)元素位置
5哪痰、 修改瀏覽器大小遂赠,字體

通過Chrome devtools,performance性能檢測(cè)主線程任務(wù)查看回流的過程


連續(xù)的讀寫DOM屬性(width,offsetTop等)晌杰,會(huì)引起強(qiáng)制的布局更新跷睦,強(qiáng)制布局更新會(huì)造成頁面抖動(dòng) layout thrashing
使用FastDom 解決布局抖動(dòng), https://github.com/wilsonpage/fastdom

三、復(fù)合線程(compositor thread)與圖層(layers)

復(fù)合就是把頁面拆成多個(gè)圖層肋演,圖層之間是互不影響的抑诸。只繪制自己的那個(gè)圖層,再進(jìn)行復(fù)合爹殊。圖層拆分默認(rèn)是瀏覽器來做蜕乡,如果某個(gè)元素對(duì)其他元素影響比較大,建立獨(dú)立圖層梗夸。
查看圖層


2.png

四层玲、減少重繪 repaint

可以利用圖層,避免回流,只觸發(fā)復(fù)合辛块,不觸發(fā)回流與重繪畔派。可以采用如下樣式代替:
position:transform:translate(x,y)
Scale:transform:scale(n)
Rotation:transform:rotate(n deg)
Opacity:Opacity : 0….1

Css屬性 will-change: transform - 告訴瀏覽器提到單獨(dú)的圖層
先看一個(gè)有回流的動(dòng)畫



打開頁面 Chrome devtools憨降,performance 錄制功能


沒有回流的動(dòng)畫
修改css 樣式

.box {
  display: flex;
  justify-content: space-around;
  will-change: transform;
}
 
 
.box .img {
  width: 300px;
  height: 300px;
}
 
.img:hover {
  transform: scale(1.5, 1);
  transition: all 2s;
}

再進(jìn)行performance 錄制功能
查看主線程 task任務(wù)此時(shí)沒有布局和繪制了父虑,查看網(wǎng)頁圖層多了一個(gè)box圖層
查看重繪:Chrome devtools ctrl shift p -> show rendering



JS操作避免回流、重繪
1授药、避免使用JS一個(gè)樣式修改完接著改下一個(gè)樣式士嚎,最好一次性更改CSS樣式,或者將樣式列表定義為class的名稱
2悔叽、避免頻繁操作DOM莱衩,使用文檔片段創(chuàng)建一個(gè)子樹,然后再拷貝到文檔中
3娇澎、先隱藏元素笨蚁,進(jìn)行修改后再顯示該元素,因?yàn)閐isplay:none上的DOM操作不會(huì)引發(fā)回流和重繪
4趟庄、避免循環(huán)讀取offsetLeft等屬性括细,在循環(huán)之前把它們存起來
5、對(duì)于復(fù)雜動(dòng)畫效果,使用絕對(duì)定位讓其脫離文檔流戚啥,否則會(huì)引起父元素及后續(xù)元素大量的回流

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奋单,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猫十,更是在濱河造成了極大的恐慌览濒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拖云,死亡現(xiàn)場(chǎng)離奇詭異兼耀,居然都是意外死亡庄呈,警方通過查閱死者的電腦和手機(jī)艾栋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門畅形,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尤筐,你說我怎么就攤上這事汇荐。” “怎么了叔磷?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵拢驾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我改基,道長(zhǎng)繁疤,這世上最難降的妖魔是什么咖为? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮稠腊,結(jié)果婚禮上躁染,老公的妹妹穿的比我還像新娘。我一直安慰自己架忌,他們只是感情好吞彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叹放,像睡著了一般饰恕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上井仰,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天埋嵌,我揣著相機(jī)與錄音,去河邊找鬼俱恶。 笑死雹嗦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的合是。 我是一名探鬼主播了罪,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼聪全!你這毒婦竟也來了泊藕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤荔烧,失蹤者是張志新(化名)和其女友劉穎吱七,沒想到半個(gè)月后汽久,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹤竭,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年景醇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臀稚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡三痰,死狀恐怖吧寺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情散劫,我是刑警寧澤稚机,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站获搏,受9級(jí)特大地震影響赖条,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一纬乍、第九天 我趴在偏房一處隱蔽的房頂上張望碱茁。 院中可真熱鬧,春花似錦仿贬、人聲如沸纽竣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜓氨。三九已至,卻和暖如春队伟,著一層夾襖步出監(jiān)牢的瞬間语盈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工缰泡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刀荒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓棘钞,卻偏偏與公主長(zhǎng)得像缠借,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宜猜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前言 移動(dòng)互聯(lián)網(wǎng)時(shí)代,用戶對(duì)于網(wǎng)頁的打開速度要求越來越高泼返。百度用戶體驗(yàn)部研究表明,頁面放棄率和頁面的打開時(shí)間關(guān)系如...
    AI喬治閱讀 731評(píng)論 0 3
  • 頁面渲染的過程 構(gòu)建DOM樹解析HTML,創(chuàng)建DOM樹姨拥,解析過程:如果遇到link & style绅喉,就會(huì)去下載這些...
    熬得薩菲閱讀 964評(píng)論 0 5
  • 前言 為能更好的理解瀏覽器性能優(yōu)化,本文會(huì)從瀏覽器多進(jìn)程架構(gòu)以及瀏覽器渲染過程逐步簡(jiǎn)單解析性能優(yōu)化要點(diǎn) 瀏覽器的多...
    不慌_(tái)afbd閱讀 500評(píng)論 0 0
  • 我們根據(jù)渲染的流程可知叫乌, 回流一定會(huì)觸發(fā)重繪柴罐,而重繪不一定會(huì)回流。 渲染性能優(yōu)化 回流和重繪的代價(jià)是比較昂貴的憨奸,渲...
    hui樹閱讀 145評(píng)論 1 0
  • 表情是什么革屠,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息排宰。高興了當(dāng)然就笑了似芝,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,444評(píng)論 2 7