前言html
說到H5測試,對於作WEB測試的同窗來講再熟悉不過了,它包括頁H5功能測試,前端性能測試,瀏覽器兼容性能測試,以及服務端性能測試。那本文談到的則是H5前端性能測試,並但願經過閱讀本文後,可以知道:H5前端性能測試什麼?如何發現問題以及相應的優化規則。前端
1、瀏覽器渲染引擎jquery
瀏覽器是Html解析和頁面最終展現的工具,因此測試H5前理解瀏覽器的工做原理是必不可少的,具體可參考《瀏覽器工做原理》。android
瀏覽器的主要功能 web
瀏覽器的主要功能是將用戶選擇的web資源呈現出來,它須要從服務器請求資源,並將其顯示在瀏覽器窗口中,資源的格式一般是HTML,也包括PDF、image及其餘格式。在瀏覽器組成部分中,渲染引擎是用戶直接相關,呈現用戶所需頁面的部分。因此從渲染引擎入手,瞭解HTML解析與頁面展現。算法
渲染引擎工做流 chrome
值得注意的是,這個過程是逐步完成的,爲了更好的用戶體驗,渲染引擎將會盡量早的將內容呈現到屏幕上,並不會等到全部的html都解析完成以後再去構建和佈局渲染樹。它是解析完一部份內容就顯示一部份內容,同時,可能還在經過網絡下載其他內容。瀏覽器
2、測試關注指標緩存
Http相關:服務器
一、Http請求個數
有統計證實:一個網頁最終到達終端用戶有80%的時間都是在js,CSS,圖片,mp3,flash等資源的http請求。另外一方面,http請求的數量也是有限制的,瀏覽器對同一個域名有鏈接數限制,不一樣瀏覽器內核、不一樣版本的請求數不盡相同,大部分的併發請求數是6個。
看來經過夠控制http請求的數量,減小http請求時間,達到減小網頁加載和呈現的時間,能帶來更好的用戶體驗。
優化方案:
二、組件是否壓縮
一般來講,組件壓縮是一種增長CPU壓縮解壓縮時間來減小網絡傳輸消耗的辦法,而且一般網絡資源較cpu資源更緊張,因此對合適的對象設置壓縮能個取得良好的收益。
三、圖片格式和大小是否合適
四、CSS放在頂部
在瀏覽器渲染過程當中談到,dom樹構建完成後。CSS要放到html代碼的開頭的head標籤結束前。若是網頁是動態生成的,那麼在head代碼完成後能夠頁面輸出,這樣瀏覽器就會更快地解析出來head中的內容,開始下載CSS文件資源。而CSS放在底部則會引發從新繪製,用戶側感覺到「閃屏」的很差體驗。
五、JS放在底部
JS在下載的時候會引發兩個問題:阻止網頁內容的展現並阻止其餘資源下載。在「減小http數量」部分中,咱們談到各類資源的下載是並行的,根據不一樣域名不一樣瀏覽器內核並行數量有所不一樣,因此下載js時候,並行下載機制失效。而且在js中可能包括document.write等改變頁面佈局的操做,因此渲染引擎會等待js下載完成再開始渲染。因此用戶側頁面加載時間會由於等待而變得更長。
六、JS &CSS壓縮
首先舉一個例子,相信你們在使用jquery時注意到有兩個文件jquery-1.4.2.js和 jquery-1.4.2.min.js,這裏的min.js就是js方式的壓縮結果。具體壓縮方法以下:
優勢:從js&CSS文件的源頭進行壓縮,縮小了http傳輸過程數據大小。
缺點:經過兩步壓縮後,再來閱讀js&CSS源碼是很是苦難的。而且通過壓縮的代碼可能和另外一個壓縮的代碼因變量被共用而引發語法錯誤。
最後,通過壓縮過的腳本文件使用務器端設置GZIP壓縮算來壓縮,可以壓使文件縮得更加的淋漓盡致。
七、是否添加緩存
爲一種減小http請求的方式,以下有兩種方式設置緩存,測試時注意經常使用資源是否請求資源時否設置緩存:
Cache-Control
「no-cache」指示請求或響應消息不能緩存(HTTP/1.0用Pragma的no-cache替換)
「no-store」用於防止重要的信息被無心的發佈。在請求消息中發送將使得請求和響應消息都不使用緩存。根據緩存超時
Expires 表示存在時間,容許客戶端在這個時間以前不去檢查(發請求),等同max-age的效果。可是若是同時存在,則被Cache-Control的max-age覆蓋。
設置方式:經過HTTP的META設置expires和cache-control<meta http-equiv=」Cache-Control」 content=」max-age=7200″ /><meta http-equiv=」Expires」 content=」Mon, 20 Jul 2016 23:00:00 GMT」 />
八、避免非200返回值
每個http請求都有一個相對於的返回狀態標誌當次請求是否如期完成,如:
1xx:請求收到,這些狀態代碼表示臨時的響應。
2xx:操做成功,這類狀態代碼代表服務器成功地接受了客戶端請求。
3xx:重定向,客戶端瀏覽器必須採起更多操做來實現請求。
4xx:客戶端錯誤,發生錯誤,客戶端彷佛有問題。
5xx:服務器錯誤,服務器因爲遇到錯誤而不能完成該請求。
因此,若是有http請求返回爲非200的狀態碼,咱們認爲這一次請求時無心義的,佔用了稀缺的網絡資源,所應該避免非200的返回狀態碼。
九、使用CDN
CDN內容分發網絡(Content Delivery Network)將源站內容發佈到最接近用戶的「邊緣」節點,使用戶可就近取得所需內容,提升用戶訪問的響應速度和成功率。解決因分佈、帶寬、服務器能力帶來的訪問延遲高問題,提供一系列加速解決方案。因此,若是H5的用戶分散在全國各地,建議儘量的將資源放到CDN,如騰訊雲CDN。
時間相關:
上述各類時間指標應根據當前H5的具體狀況,選擇合適的測試指標
WebView相關:
在android和IOS上測試H5性能,測試員還應該關注因加載H5而引發的app常規性能指標。
3、經常使用工具
工欲善其事,必先利其器,在作H5前端性能測試以前,選擇合適的工具能讓咱們的測試工做事半功倍。本文要提到的工具備兩類:
一類是抓包工具,如Fiddler、Charles等。這類工具不只能夠抓包,還能夠對包進行修改,動態展現瀑布流,對web進行調試。在咱們作H5前端性能測試的時候,我的以爲只要不修改包,不對H5調試,就能夠放棄使用這類工具,不是工具很差,而是大材小用。
還有一類,這裏重點提到的是如Page Speed、PCAP Web Performance Analyzer、WebPagetest這類平臺型工具。咱們能夠快捷的測試出H5前端性能中數據,視圖,並給出必定程度的優化建議。
(*以上爲我的看法,若有疏漏和錯誤,請及時指正)
以手機管家端午節運營活動H5爲例,附上上述工具測試結果頁,固然這裏僅僅是結果的羅列。具體的分析仍是須要測試人員來作,衡量是否符合當前運營需求。
WebPagetest
Page Speed:
PCAP Web Performance Analyzer:
Chrome DevTools:
常見問題舉例:
一樣以手機管家端午節運營活動H5爲例:(完成整個加載性能測試耗時只需20分鐘左右)
一、HTTP請求過多
圖爲PCAP Web Performance Analyzer解析pcap包的結果,圖中咱們能夠看出,21個http請求中,有7個是統計點發出的請求。這裏能夠考慮統計點合併上報和首屏時減小上報統計點。
二、圖片空白部分太多
這裏須要用到的圖片僅僅是做爲右上角分享,可是在咱們請求的圖片確實整張完整的圖。
能夠考慮請求小的切圖,經過CSS控制圖片顯示位置。
三、圖片尺寸
下面一張背景圖,咱們能夠看到尺寸是1080X1919,而後當前市面上Android主流機型主要爲 480×800, 480×854, 540×960, 720×1280, 800×1280 。因此,爲每個移動設備都提供一張1080X1919的圖片實在沒有必要。
四、沒有使用的資源
下面這一幅圖,在chrome DevTools中看到請求響應並下載成功,可是在實際的H5活動中並無使用過。
五、返回碼非200
非200的返回碼意味着本次請求沒有實質性的收穫,如上圖所示的兩次非200請求返回值:
404:上圖請求圖片時出現404:一方面,可能圖片自己在H5中就不展現,因此這裏直接去掉多餘的鏈接就行了。另外一方面,可能H5中須要該圖片,而剛好訪問結果爲404,那此時就定位了一個bug 的存在。
302:請求音樂時出現302重定向:從圖中能夠明顯看出兩次請求後才獲取到背景音樂,從用戶側可能會感知是音樂加載速度慢。
六、未使用CDN,未設置cache
若是該運營活動是全國性的,且用戶量很大,那麼很是有可能網絡「邊緣」的用戶沒有辦法正常訪問該H5活動。
七、資源未壓縮
這裏詳細列出了各個沒有壓縮的圖片資源。這裏要建議的圖片的壓縮,如上圖測試結果,壓縮後能夠減小16K的圖片資源大小。還能夠考慮是否採用圖片地圖來減小http請求。