一、同步加載
平常默認用的都是同步加載。如:<script src="http://yourdomain.com/script.js"></script>
同步模式又稱阻塞模式,會阻止瀏覽器的后續處理,停止了后續的文件的解析,執行,如圖像的渲染。流覽器之所以會采用同步模式,是因為加載的js文件中有對dom的操作,重定向,輸出document等默認行為,所以同步才是最安全的。通常會把要加載的js放到body結束標簽之前,使得js可在頁面最后加載,盡量減少阻塞頁面的渲染。這樣可以先讓頁面顯示出來
二、異步加載
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'http://yourdomain.com/script.js';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
異步加載也叫非阻塞模式加載,瀏覽器在下載js的同時,同時還會執行后續的頁面處理。
在script標簽內,用js創建一個script元素並插入到document中,這種就是異步加載js文件了。
同步加載流程是瀑布模型,異步加載流程是並發模型。
三、延遲加載(lazy loading)
前面解決了異步加載(async loading)問題,再談談什么是延遲加載。
延遲加載:有些 js 代碼並不是頁面初始化的時候就立刻需要的,而稍后的某些情況才需要的。延遲加載就是一開始並不加載這些暫時不用的js,而是在需要的時候或稍后再通過js 的控制來異步加載。
也就是將 js 切分成許多模塊,頁面初始化時只加載需要立即執行的 js ,然后其它 js 的加載延遲到第一次需要用到的時候再加載。
特別是頁面有大量不同的模塊組成,很多可能暫時不用或根本就沒用到。
就像圖片的延遲加載,在圖片出現在可視區域內時(在滾動條下拉)才加載顯示圖片
四、預加載
預加載是一種瀏覽器機制,使用瀏覽器空閑時間來預先下載/加載用戶接下來很可能會瀏覽的頁面/資源,當用戶訪問某個預加載的鏈接時,如果從緩存命中,頁面就得以快速呈現。