隨着移動互聯網的發展,用戶對產品的使用體驗要求愈來愈高。H5做爲業務的重要載體,在移動端的應用很是普遍,所以H5頁面性能是一個很是核心的用戶體驗指標。css
本文結合【餓了麼首屏優化實踐】爲你們介紹頁面性能優化的思路。 前端
性能優化的首要基礎是數據和指標。沒有正確的數據和指標指引,優化思路和方向多是誤差的。算法
UC在首屏性能指標的統計上,支持內核指標和標準的W3C標準指標。跨域
首屏時間是指頁面第一屏全部資源完整展現的時間。這是一個對用戶來講很是直接的體驗指標,可是對於前端倒是一個很是難以統計衡量的指標。瀏覽器
一般的作法是,domContentLoadedEventEnd - fetchStart,甚至使用 loadEventStart-fetchStart ,此時頁面DOM樹已經解析完成而且顯示內容。如下給出統計頁面性能指標的方法。 緩存
線上監控對於數據摸底和發現問題意義重大,通常在測試階段咱們只能作到基本的分析,很難得到在不一樣環境下真實準確的數據,那怎麼知道上線後性能是否有問題,或者怎麼在出現問題苗頭的時候,儘快的掐滅呢?實時線上監控是最優的選擇。性能優化
嶽鷹全景監控平臺,能夠將SDK採集上報的數據進行實時分析,能夠很直觀很方便的查看應用的性能指標。而且還能經過設置告警規則,當性能指標達到閾值的時候,及時通知,第一時間發現問題,及時處理。markdown
經過實時大盤,初步瞭解性能波動狀況。 網絡
查看頁面性能狀況,經過核心指標,如首字節、DOM Ready、頁面徹底加載等分析首屏性能、頁面加載性能。(若是對接了UC內核,可直觀的經過T2瞭解首屏性能) dom
進一步分析,瞭解TOP訪問頁面的性能狀況
經過多維度聚合分析,更進一步定位到問題範圍
經過線上數據進行摸底分析以後,能夠繼續進行深刻分析和優化。
前端:前端圍繞着優化首屏,收斂域名,js資源治理,js耗時治理,圖片治理,接口治理等方向展開。
客戶端:客戶端圍繞着提高容器啓動速度,優化攔截邏輯,爲前端提供預加載等各類能力,提供類原生體驗等方向展開。
【乾貨預警】下面是咱們在餓了麼端H5優化專項中,總體的優化思路。
H5資源和數據都依賴於網絡,因此優化中的一大策略就是預加載。咱們先來了解一下H5場景中,有哪些常見的緩存。
針對這些緩存,咱們經常使用的預加載手段。
關於接口預加載,咱們是在js plugin裏面作的。固然還能夠在網絡庫中間件中攔截處理。HTTP接口預加載的兩種實現方式:
接下來咱們來看看如何去分析一個H5頁面的性能優化點。
可使用UC魯班尺平臺。它會生成一份性性能報告
魯班尺是基於Lighthouse作的,Lighthouse本地跑的時候,除了能夠生成性能報告,還能夠生成Chrome Trace文件,便於咱們分析。固然也能夠本地去抓Timeline、Chrome Trace日誌。拿到性能報告後,咱們能夠大體看看哪些地方比較耗時,資源加載,S耗時等等。再根據Trace日誌去具體分析。
若是對接了UC內核,能夠分析T2日誌,分析的時候關注幾個數據:
肯定了T2線以後,就能夠分析T2線以前的頁面渲染狀況,以及影響頁面渲染的因素。
分析T2以前的渲染總體渲染狀況,好比JS執行較長的部分,加載時間較長的部分。
主要是Doc、接口和各類資源的加載性能。通常說來加載耗時超過300ms就算很是慢了,主要看資源是否走了離線緩存。
主要分析排版出現的內容是否合理,排版的時機是否合理,是否存在大量重排、刷新樣式的狀況。
JS性能主要包含三個方面:
通常說來v8.compile耗時超過100ms,就是比較耗時的了。
另外還須要關注兩個v8.run之間的執行間隔,通常說來出現間隔的時候是在等待接口或者資源。這塊能夠成爲優化的點,例如接口預加載、資源離線等。
而後使用timeline分析具體函數耗時,找出耗時較多的js函數,針對性的進行優化。
通常說來影響T2計算的有兩個因素:
圖片特別是小圖標會某些頁面上會顯著的影響T2時間,好比在餓了麼的選擇紅包頁,通過分析,是紅包列表上面的小圖標大大的延長了T2時間,改爲iconfont實現後。優化T2耗時1400多ms,性能提高45%以上。
因此咱們能夠把這部分小圖片用IconFont或者css代替(svg矢量圖沒法計算圖片寬高,故不歸入計算)。若是實在有些圖片須要忽略T2計算,也可使用uc-perf-stat-ignore(新版本內核支持3.22)標記。
比較UC的T2Paint_Event和W3C的loadEventStart兩個事件的時間差,來觀察圖片解碼對T2計算的影響。
搜索DecodeImage能夠觀察圖片的解碼狀況
本文就給你們介紹這麼多,若是想要知道應用線上的性能狀況,歡迎試用嶽鷹全景監控平臺。
嶽鷹全景監控平臺,讓用戶體驗提高更簡單 >>>戳我訪問嶽鷹全景監控平臺<<<