1. 程式人生 > >高效前端:加快頁面開啟速度

高效前端:加快頁面開啟速度

  • head中的js會引起堵塞,阻礙DOM的渲染,可以使用以下方法代替;
    (1)將script標籤放在body後面
    (2)給script標籤新增defer屬性,添加了defer屬性之後,引入的js檔案會變為非同步載入形式,而執行的時機在於document的readyState==interactive(可互動)之後,DOMContentLoaded事件之前。同時,加上defer之後,資源的優先順序將會變的最低(優先順序影響資源的載入順序,優先順序高的就算在後面也會先載入),img的優先順序都會比defer高。
  • 儘量減小head中的css資源
    (1)不要在css檔案中使用太多的base64,將一張圖片轉化為base64會大大增加檔案的體積;
    (2)如果css檔案內容比較少,就10k20k左右,也可以考慮寫成內聯樣式處理。這種寫法雖然對快取不太有利,但是對於首屏載入速度卻能夠提高不少;
  • 優化網頁中的圖片
    (1)使用img標籤的srcset屬性可以設定不同dpr下載入不同的圖片資源
    <img srcset="images/test(1).jpg 1x,images/test(2).jpg 2x"  src="images/test(3).jpg" alt="">
    
    表示在dpr為1時載入test(1)資源,dpr為2時載入test(2)資源,其他情況下使用src中的資源。
    但是srcset屬性可能存在相容問題
    在這裡插入圖片描述
    還可以使用picture標籤(picture標籤中必須要有img標籤,否則不顯示)
    <picture>
        <source srcset="images/test(1).jpg" media="(max-width:800px)">
        <source srcset="images/test(2).jpg" media="(min-width:901px)">
        <img src="images/test(3).jpg" alt="">
    </picture>
    
    (2)使用圖片懶載入;
  • 壓縮與快取(需要nginx配置)
    (1)gzip壓縮程式碼
    (2)cache-control,在nginx中配置Last-Modified之後,nginx的http響應頭就會返回html檔案的最近修改時間,這樣就會可以判斷檔案是否已被更改,是否需要重新請求資源。
    (3)使用etag
    在這裡插入圖片描述
    (4)使用http2,http2主要的優勢在於對於一個域只會建立一個TCP連線,多路複用,傳輸多個資源,就不需要使用類似於spirit,合併js/css等技術減少請求數了,可以做到同時載入多個資源。
  • 其他優化方式
    (1)使用dns預讀取
    <link ref="dns-prefetch" href="https://www.google.com">
    <link ref="dns-prefetch" href="https://www.baidu.com">
    
    在head中加上這些link標籤就可以對相應的域名提前進行dns解析,並且由於是並行操作,不會阻礙頁面的渲染。
    (2)html優化,可以通過對html去空格處理優化。