1. 程式人生 > >腳本加載優化

腳本加載優化

使用 沒有 quest 事件 加載 交互 需要 sync 改變

如果我們只是單純在 head 或 body 中引用腳本,由於是否會更改DOM是未知的, 所以腳本在下載執行的過程中會完全阻塞頁面的渲染。

若腳本在 head 或 body 中間,有很大可能會出現空白頁面,也無法進行用戶交互,用戶體驗很差。

即便是可以並行下載 javascript 文件,但這個下載過程中會影響圖片等資源的下載。

所以我們首先需要做的是:

把 script 標簽放在 body 裏最底部;

因為進行 HTTP 請求時有額外的性能開銷,如三次握手,所以還要盡量減少 HTTP 請求:

把 javascript 文件合並成一個;

在一個請求裏加載多個 javascript 文件

但是以上並沒有解決我們的問題,一個大的 javascript 文件會下載執行腳長時間,在這段時間裏,瀏覽器無法做其他事情。這就需要無阻塞腳本,也就是在頁面加載完成後才加載 javascript 代碼,即在 window對象 的 load 事件觸發之後再下載腳本。

1 延遲腳本

defer:首先我們要確定該腳本不會改變DOM,因為加上就是告訴瀏覽器這個腳本不會改變 DOM,可以在頁面加載完成後再執行。 給 script 標簽加上這個屬性後,這個文件就可以跟其他資源並行下載了。IE 從 IE10 開始不支持 defer

async:與 defer 區別在於下載完成後就執行,但 defer 要等到頁面加載完成後才執行

2 動態腳本

也就是動態創建一個 script 標簽,在合適的時機插入到頁面中,我們可以這種方法來根據需要加載文件,也能指定腳本加載順序。

3 XMLHttpRequest腳本註入

就是通過 XHR 獲取腳本 然後在回調函數中創建 script 標簽並插入到頁面中

推薦方法

先添加動態加載所需的腳本,盡可能精簡,其中添加一個加載腳本的函數

在 script 標簽中調用函數加載其他腳本

當然,也有一些懶加載庫能使用。

腳本加載優化