此篇文章介紹前端性能優化的一些實踐方案。主要是結合結尾幾個案例摘抄總結,找出性能優化過程當中一些通用的方案。css
2. 離線緩存:客戶端緩存html頁面,webview啓動時用緩存的頁面展現給用戶,wns組件同時計算緩存頁面的md5,並放到請求頭的e-tag上,服務器收到請求後,將服務器上須要返回給客戶端的html頁面的md5值與緩存頁面的md5值進行比對,若是一致返回304,若是不一致,則刷新webview,顯示最新數據,並更新緩存內容。只緩存html資源,其它靜態資源依賴瀏覽器緩存。html
3. 增量更新:內容拆分紅靜態內容和動態內容後,對靜態內容進行增量更新,也就是隻更新有變化的部分。將靜態資源打包動態更新至客戶端,客戶端提早下載靜態資源包,用戶訪問先從本地加載資源,減小白屏時間。此種方法只在核心頁面使用,根據資源包的大小,網絡環境判斷是否下載。例如低於 100kb的資源包,3g、4g、WIFI 環境啓動下載,超過 500KB WIFI 環境下才會下載。前端
4. 預加載:經過前置頁面提早預加載相關資源。web
5. 頁面圖片的處理:雪碧圖,CSS3寫的圖,使用base64位引用小的icon圖。支持webp圖片格式。針對不一樣的網絡帶寬下載不一樣的圖片格式,好比wifi下載高清圖,4g普通圖,3g低質量的圖。圖片的懶加載。減小圖片大小和圖片請求。c#
6. 首屏優化:域名收斂(減小dns尋址時間),html文檔壓縮(減小同步返回的數據量),靜態資源合併,模塊異步加載,圖片懶加載等。segmentfault
7. 合適的數據渲染方式:模版的渲染究竟是前端作仍是後端輸出視狀況而定。後端輸出模版適用於數據量不大的狀況,當數據量較大,後端輸出的html體積會增大,此時可採用前端模版來渲染,後端開接口只提供數據,前端組裝頁面模塊並展現。折中的辦法是後端輸出部分的靜態數據,加快頁面展現,前端再去獲取最新數據並對模塊進行更新。目前咱們的活動模板就採用了這種方式。後端
8. 提早緩存大促相關資源:大促預熱期間,使用localstorage緩存大促期間要用的公共靜態資源,減小cdn的壓力。瀏覽器
9. 兜底容災:接口請求錯誤時使用緩存數據補上,若是緩存數據沒有,則隱藏該模塊。緩存
10. 支持http/2性能優化
11. 利用調試工具分析網頁的cpu 和內存佔用,網絡請求,動畫性能等指標。
12. service worker+流的結合:在網站和客戶端之間放置一個service worker,service worker的做用是在獲取缺失信息的同時緩存某些固定不變的數據,加速頁面的渲染。
13. 全部的靜態文件在上線前都內聯到頁面上,從而減小請求數量。這個打包工具會作處理。
14. 本地緩存:將頁面中不變的靜態資源,好比css,html,js文件保存在本地的localstorage裏,甚至把頁面上某個節點的內容保存在localstorage裏,掛個空的鉤子。獲取鉤子去加載本地存儲的具體內容。
16. 模塊的異步加載,不在首屏的先不加載,等到滾動或其餘外部條件觸發時再加載。
17. 分析統計數據:給請求加埋點,統計耗時,錯誤請求等。模塊5秒鐘內沒有渲染完成加埋點等。根據統計結果針對性分析。
18. dns階段能夠作域名收斂。
19. 獲取html文件階段,能夠考慮離線包。
20. 從cdn上獲取js/css等靜態文件的時候,能夠考慮本地緩存,離線包等。
21. 開發環境與生產環境能自由切換。
22. 每一個組件都包含本身須要的圖片,樣式,js,html模版等資源文件。加載一個組件時能將該組件所須要的全部資源加載到,實現組件的複用。
23. 組件的功能界限問題:哪些功能在組件內部封裝,哪些功能由組件調用者實現。內部邏輯寫在組件內部,可變內容由調用者提供。給組件傳遞參數的時候,能夠將參數合併後整成對象傳入。
24. 補充前端自動化測試:檢測html是否規範,連接是否合法,靜態資源的合法性,js報錯,頁面是否有彈出框,是否有console,頁面js的內存紀錄,接口的返回數據格式測試,模塊是否開天窗等。
25. 快速上線的通道:只用於修改樣式等簡單的前端問題。
26. 頁面展現階段:懶加載,圖片支持webp格式,裁剪尺寸等。
27. 使用requestAnimationFrame()將模版渲染切片。使用point-event:none,禁用滾動中頁面的hover效果。
案例來源:
QQ空間前端工程師如何作首屏優化 (1,2,3,4點)
蘇寧移動前端負責人朱海源:移動端電商類展現頁面性能優化實戰 (5,6,7,8,9點)
惟快不破:Web 應用的 13 個優化步驟 (10,11,12點)
[聊一聊系列]聊一聊百度移動端首頁前端速度那些事兒 (13,14,15,16點)
【第620期】PC與無線齊飛,Web共Native一色——天貓首頁全解密 (17,18,19,20點)
【第597期】滬江易將來:滬江網校前端架構漫談 (21,22,23點)
聊一聊淘寶首頁和它背後的一套 (24,25,26,27點)