在說異步加載的時候,先把應用背景說一下!
我們平時使用最多的是同步加載,同步模式又稱為阻塞模式!顧名思義,他會阻止瀏覽器的后續處理,停止后續一系列的解析,包括后續文件的加載,渲染,代碼執行等等!
那既然同步模式有那么多弊端,為啥我們還要用它呢!其實是為了安全性考慮的,js之所以要同步執行,很多時候是考慮到輸出document內容,修改dom,重定向等行為,所以默認同步執行才是最安全的!
那么我們也知道,有時候我們就是有這樣的需求,希望頁面先進行展示,其中的某些部分可以慢慢加載!這樣用戶體驗會更加好,否則頁面一直顯示不出來,等加載也不是個事!
那么知道了同步加載的概念,其實異步加載就很簡單了,反過來就是了!異步加載也叫非阻塞加載咯,不需要等加載完,后續的頁面就可以進行處理了!
今天我主要是說一下一種異步加載的方式,就是onload時候的異步加載
(function() {
function load(){
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'http://example.com/script.js';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
}
if (window.attachEvent)
window.attachEvent('onload', async_load);
else
window.addEventListener('load', async_load, false);
})();
其中async屬性是HTML5中新增的異步支持,這邊是用到了匿名函數的用法!
window.attachEvent是用來給一個事件指派多個處理過程的!
window.addEventListener跟上面一樣,只不過Mozilla/Firefox 不支持 attachEvent,只支持addEventListener!
