前端性能測試

前言

性能優化無非就是讓頁面的打開速度更快一些,以得到更好的用戶體驗。前端在這方面可以做到的有兩方面,頁面級別的優化,比如減少 Http 請求次數、加快資源的加載速度;二是代碼級別的優化,頁面重新渲染一次會經過瀏覽器的重排(reflow)和重繪(repaint),這兩部操作是非常耗時的,本文將根據這兩方面的優化途徑,大致總結一下。

頁面級別優化

1. 減少 HTTP請求數

首先,每個請求都是有成本的,既包含時間成本也包含資源成本。一個完整的請求都需要經過 DNS尋址、與服務器建立連接、發送數據、等待服務器響應、接收數據這樣一個 “漫長” 而復雜的過程。時間成本就是用戶需要看到或者 “感受” 到這個資源是必須要等待這個過程結束的,資源上由于每個請求都需要攜帶數據,因此每個請求都需要占用帶寬。另外,由于瀏覽器進行并發請求的請求數是有上限的 (具體參見此處 ),因此請求數多了以后,瀏覽器需要分批進行請求,因此會增加用戶的等待時間,會給用戶造成站點速度慢這樣一個印象,即使可能用戶能看到的第一屏的資源都已經請求完了,但是瀏覽器的進度條會一直存在。

減少 http 請求次數的主要方法:

設置 HTTP緩存

http 緩存是 web 性能優化中非常重要的一種手段,把一些常用資源在首次加載時緩存到瀏覽器本地,再次加載時可大大減少請求次數,緩存的資源越多,性能當然越好。

緩存的規則主要有兩種,強制緩存和對比協商緩存,兩種緩存分別通過Http報文頭部不同的字段進行控制。


資源合并壓縮

CSS、 Javascript、Image 都可以用相應的工具(Webpack)進行壓縮,壓縮后往往能省下不少空間。

CSS Sprites

合并 CSS圖片,減少請求數的又一個好辦法。

懶加載

這條策略實際上并不一定能減少 HTTP請求數,但是卻能在某些條件下或者頁面剛加載時減少 HTTP請求數。

2. 把 js 腳本置底加載

js 腳本是很容易形成阻塞,導致資源加載停滯,為了避免這種情況,先加載其他資源,最后加載腳本。

3. inline 腳本異步執行

inline 腳本與外鏈引用的腳本類似,也有可能會引起阻塞,所以也要將 inline 腳本放到頁面底部或者異步方式來加載,

例如使用script標簽的defer?和async屬性、使用setTimeOut。

4. 動態加載 js 模塊

5. css 放在 head 中

頁面渲染過程還要經歷重繪重排,這樣做是避免會出現 DOM 加載完之后卻沒有樣式的情況。

代碼級別優化

DOM操作應該是腳本中最耗性能的一類操作,例如增加、修改、刪除 DOM元素或者對 DOM集合進行操作。

而修改 DOM 會引起網頁的重新渲染。

重新渲染,就需要重新生成布局和重新繪制。前者叫做"重排"(reflow),后者叫做"重繪"(repaint)。

需要注意的是,"重繪"不一定需要"重排",比如改變某個網頁元素的顏色,就只會觸發"重繪",不會觸發"重排",因為布局沒有改變。但是,"重排"必然導致"重繪",比如改變一個網頁元素的位置,就會同時觸發"重排"和"重繪",因為布局改變了。

這這兩步只是網頁生成的最后兩部,關于頁面的生成過程,主要有五步:

1. HTML代碼轉化成DOM2. CSS代碼轉化成CSSOM(CSS Object Model)3. 結合DOM和CSSOM,生成一棵渲染樹(包含每個節點的視覺信息)4. 生成布局(layout),即將所有渲染樹的所有節點進行平面合成5. 將布局繪制(paint)在屏幕上


這五步里面,第一步到第三步都非常快,耗時的是第四步和第五步。

"生成布局"(flow)和"繪制"(paint)這兩步,合稱為"渲染"(render)。


具體技巧參照:http://ruanyifeng.com/blog/2015/09/web-page-performance-in-depth.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容

  • 說到H5測試,對于做WEB測試的同學來說再熟悉不過了,它包括頁H5功能測試,前端性能測試,瀏覽器兼容性能測試...
    微涼_80b6閱讀 424評論 0 1
  • 點擊鏈接加入QQ群229390571(免費公開課、視頻應有盡有):https://jq.qq.com/?_wv=1...
    測試幫日記閱讀 755評論 0 2
  • 一、測試關注指標 Http相關: 1、Http請求個數 有統計證明:一個網頁最終到達終端用戶有80%的時間都是js...
    by小杰閱讀 620評論 0 4
  • 前端性能優化資料整理 頁面性能差的直接后果是用戶需要等待,而等待,尤其是不確定要多長時間的等待會給用戶帶來焦慮,為...
    飄零之雪閱讀 833評論 2 3
  • 圍繞前端的性能多如牛毛,涉及到方方面面,以我我們將圍繞PC瀏覽器和移動端瀏覽器的優化策略進行羅列注意,是羅列不是展...
    流動碼文閱讀 695評論 0 0