關於前端性能優化相關的技術知識,網上隨便搜一些就有不少,本文將系統性的從初級到高級的思路,總結移動前端性能優化各個方面的相關技術點,內容來自筆者以往經驗的總結,但願讀者能夠花些時間看看。javascript
在目前大多數剛從事前端開發,或者是正在學習前端開發的同窗來講,性能優化對於他們可能還比較遠,可是脫穎而出,拉開差距的點,每每就在與性能優化,和理論知識不一樣,性能優化每每來自平常的工做經驗中總結而來,也是目前大廠面試前端必問的知識點,因此重要性就不言而喻了。php
爲何要壓縮?css
不一樣於大部分放在服務端的後臺代碼,前端全部的文件程序代碼都是要經過瀏覽器下載下來運行使用,這就牽扯到網絡和請求延時,因此前端文件的精簡和壓縮決定了前端性能的第一步。html
介於目前的前端框架類庫,webpack,vue-cli等等,已經能夠直接將這一步操做集成到咱們的系統項目中了,能夠直接查看各個框架的文檔來進行配置,單純的使用原生技術,能夠參考下面:前端
HTML代碼壓縮就是壓縮這些在文本文件中有意義,可是在HTML中不顯示的字符,包括空格,製表符,換行符等,還有一些其餘意義的字符,如HTML註釋也能夠被壓縮。vue
JavaScript壓縮,主要是去除多餘的換行和空格等等,對於語法來講,JavaScript能夠選擇混淆壓縮和非混淆壓縮,不管哪一種壓縮都是爲了減小JavaScript的文件大小,固然出於前端代碼保護來看,混淆壓縮會大大破壞原有的閱讀邏輯,增長壓縮比,從而給代碼添加一層保護。 CSS壓縮,同理是去除多餘的換行和空格等等,因爲CSS文件的特殊性暫時沒法實現混淆壓縮,壓縮主要是將大量的換行去除,能夠減小很多的文件大小。java
對於常見的前端項目,關於圖片的使用,主要有如下兩種:node
CDN
上,前端經過連接請求。backgroundPosition
定位所需圖片)。 缺點:整合圖片比較大時,加載比較慢(若是這張圖片沒有加載成功,整個頁面會失去圖片信息)。jpeg
類型圖片,缺點是不支持透明。 有條件的話使用webP(一種Google開發的新類型)類型圖片是最佳選擇,相比於jpeg,有更小的文件尺寸和更高的圖像質量。在前端編碼的時候將css、js等靜態資源文件合併壓縮以外,咱們還能夠在頁面中將多個css、js的請求合併爲一個請求。文件的合併帶來的是http請求數的減小,尤爲是在移動端,每個http請求帶來的是慢啓動
,三次握手
,鏈接創建
,因此資源的合併是由爲重要的,合併和不合並對比: webpack
HTML頁面加載渲染的過程: git
根據上圖咱們來屢一下整個流程:
阻塞
其餘的下載和呈現。 那麼如何解決和避免阻塞的問題呢,咱們經過測試代碼分別測試不一樣狀況下引入js和css的問題以下:<!DOCTYPE html>
<html>
<head>
<title>test</title>
<link rel=」stylesheet」 type=」text/css」 href=」stylesheet.css」 media=」screen」>
<link rel=」stylesheet」 type=」text/css」 href=」page-animation.css」 media=」screen」>
<script type =」text/javascript」 >複製代碼
測試過程省略,能夠參考這裏,咱們能夠獲得以下的結論:
<script src>
引入的外部js會阻塞後面節點的渲染,因此外部js儘可能放在body底部。<script src>
,須要增長defer
來解決。若是一個H5頁面沒有利用任何緩存,那麼這個頁面將沒有任何存在的意義。
從從HTTP協議緩存,到瀏覽器緩存,再到APP Cache,一直在最近比較火的Service worker,咱們能夠選擇多種的緩存方式,入門基原本說說HTTP協議緩存:
當瀏覽器對某個資源的請求命中了強緩存時,返回的HTTP狀態爲200,在chrome的開發者工具的network裏面 size會顯示爲from disk cache,這種狀況下是不用發送任何請求,以下圖
當瀏覽器對某個資源的請求沒有命中強緩存,就會發一個請求到服務器,驗證協商緩存是否命中,若是協商緩存命中,請求響應返回的http狀態爲304而且會顯示一個Not Modified的字符串,好比你打開京東的首頁,按f12打開開發者工具,再按f5刷新頁面,查看network,能夠看到有很多請求就是命中了協商緩存的:
懶加載對於移動web端,尤爲是最多見的滾動加載場景是一項很是重要的優化措施。而預加載則經常應用於多tab場景的頁面,讓用戶更快的看到打開的下一個頁面。
img src
纔會被設置進來,沒有到達可視區域前並不現實真正的src,而是相似一個1px的佔位符。對於一些剛入門的前端玩家,或者是還在學習前端的同窗,掌握了上面的入門級性能優化基礎知識,才能算是基本的合格,真正更進一步的優化,更適合移動端web的性能點,能夠參考進階版。