如何系統(tǒng)的優(yōu)化頁面

前面在渲染的各個階段講到了當(dāng)前階段內(nèi)可做的優(yōu)化,本文綜合一下汪榔。

頁面三個階段

加載階段俘闯、交互階段和關(guān)閉階段潭苞,只要關(guān)注點在于前兩個階段。

加載階段

  • 從發(fā)起請求到頁面呈現(xiàn)出來真朗。
  • 性能因素為網(wǎng)絡(luò)和JS腳本此疹。

交互階段

  • 從頁面呈現(xiàn)出來到交互操作的過程。
  • 性能因素為JS腳本遮婶。

關(guān)閉階段

包含用戶關(guān)閉頁面后瀏覽器所做的清除操作蝗碎,和用戶體驗關(guān)系不大。

加載階段

  • 從渲染流水線得知旗扑,影響首次渲染的主要因素為:外部依賴文件的下載及對其他渲染任務(wù)的阻塞蹦骑。
  • 阻塞頁面首次渲染的外部文件稱為關(guān)鍵資源,如:CSS文件臀防、JS文件眠菇。圖片边败、視頻等不在其中。

影響頁面首次渲染的因素

依據(jù)關(guān)鍵資源展開捎废。

  • 關(guān)鍵資源的數(shù)量放闺。
  • 關(guān)鍵資源的大小。
  • 請求關(guān)鍵資源所需的RTT(TCP傳輸中一個數(shù)據(jù)報發(fā)出到收到接收確認(rèn)缕坎,所經(jīng)歷的時間),請求資源在時間上是重疊的篡悟,計算最大資源所需RTT即可谜叹。

優(yōu)化方案

依據(jù)上述因素,總的優(yōu)化原則為減小關(guān)鍵資源數(shù)量搬葬、壓縮關(guān)鍵資源大小和降低關(guān)鍵資源請求RTT次數(shù)荷腊。

減小關(guān)鍵資源數(shù)量

  • 將小的外聯(lián)文件改為內(nèi)嵌式。
  • 引入CSS文件時加入媒體查詢急凰。
  • 引入JS文件時采用異步加載(關(guān)鍵字:defer女仰、async)。

壓縮關(guān)鍵資源大小

  • 使用打包工具插件對文件進(jìn)行壓縮抡锈。
  • 去掉文件注釋疾忍。

降低關(guān)鍵資源請求RTT次數(shù)

  • 通過減小關(guān)鍵資源數(shù)量和減小關(guān)鍵資源大小相配合實現(xiàn)。
  • 通過CDN加速降低RTT時長床三。

交互階段

  • 交互階段不需加載外部資源一罩。
  • 會有JS觸發(fā)的DOM、樣式變化以及CSS變換撇簿,需要渲染新的幀聂渊。
  • 交互階段優(yōu)化即為渲染幀速度的優(yōu)化。

優(yōu)化方案

減少JS執(zhí)行時間

js執(zhí)行時間過長時會阻塞主線程四瘫,導(dǎo)致其他渲染任務(wù)不能盡快執(zhí)行汉嗽。

  • 將大的JS任務(wù)劃分為多個小任務(wù)。
  • 使用web worker執(zhí)行耗時的無DOM操作的任務(wù)找蜜。

避免強(qiáng)制同步布局

正常的布局
  • 通過DOM接口添加或刪除元素后會重新進(jìn)行樣式的計算饼暑、布局。
  • 正常情況下锹杈,為不阻塞主線程撵孤,所需的樣式計算、布局竭望、節(jié)點的增刪會在另外的任務(wù)中異步完成邪码。
強(qiáng)制同步布局

JS將上述的樣式計算、布局強(qiáng)制加入當(dāng)前任務(wù)中執(zhí)行咬清。

觸發(fā)條件

在對DOM進(jìn)行增刪后闭专,操作DOM相關(guān)值奴潘,為保證值的準(zhǔn)確性,會立刻執(zhí)行更新任務(wù)影钉。
所以須避免在DOM增刪后操作DOM相關(guān)值画髓。

避免布局抖動

避免在一次JS執(zhí)行中頻繁的觸發(fā)強(qiáng)制同步布局和抖動。

善用CSS動畫

  • CSS動畫性能更好且不受主線程影響平委,盡量使用CSS動畫奈虾。
  • 使用CSS動畫時善用will-change字段。

避免頻繁的垃圾回收

  • 頻繁創(chuàng)建局部對象會引發(fā)頻繁的垃圾回收廉赔。
  • 垃圾回收任務(wù)在主線程執(zhí)行肉微,可能會阻塞其他任務(wù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜡塌,一起剝皮案震驚了整個濱河市碉纳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馏艾,老刑警劉巖劳曹,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琅摩,居然都是意外死亡铁孵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門房资,熙熙樓的掌柜王于貴愁眉苦臉地迎上來库菲,“玉大人,你說我怎么就攤上這事志膀∥跤睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵溉浙,是天一觀的道長烫止。 經(jīng)常有香客問我,道長戳稽,這世上最難降的妖魔是什么馆蠕? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮惊奇,結(jié)果婚禮上互躬,老公的妹妹穿的比我還像新娘。我一直安慰自己颂郎,他們只是感情好吼渡,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乓序,像睡著了一般寺酪。 火紅的嫁衣襯著肌膚如雪坎背。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天寄雀,我揣著相機(jī)與錄音得滤,去河邊找鬼。 笑死盒犹,一個胖子當(dāng)著我的面吹牛懂更,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播急膀,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼膜蛔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脖阵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤墅茉,失蹤者是張志新(化名)和其女友劉穎命黔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體就斤,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悍募,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了洋机。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坠宴。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绷旗,靈堂內(nèi)的尸體忽然破棺而出喜鼓,到底是詐尸還是另有隱情,我是刑警寧澤衔肢,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布庄岖,位于F島的核電站,受9級特大地震影響角骤,放射性物質(zhì)發(fā)生泄漏隅忿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一邦尊、第九天 我趴在偏房一處隱蔽的房頂上張望背桐。 院中可真熱鬧,春花似錦蝉揍、人聲如沸链峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熏版。三九已至纷责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撼短,已是汗流浹背再膳。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留曲横,地道東北人喂柒。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像禾嫉,于是被迫代替她去往敵國和親灾杰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355