非同步載入JS之async、defer
阿新 • • 發佈:2019-02-02
繼前面瞭解的JS載入時間線,然後對JS的非同步載入的方式進行了更深一步的瞭解;
預設情況下,js檔案是同步載入的,當頁面載入到js檔案時,頁面就會被阻斷在這個地方,阻斷了HTML、CSS的載入線;
為什麼不非同步載入js呢?(因為,js會修改HTML、CSS);
又因為js是同步載入的,所以對於不會修改頁面的js工具包來說,是浪費了效率的,因為他阻斷了HTML、CSS的載入線;所以,我們就希望對於這樣(不呼叫就不會對頁面有影響的工具包)工具包,他應該是非同步載入的;
非同步載入簡單的兩種方式
1、defer屬性,用法:
<script type="text/javascript" src="example.js" defer="defer"></script>
這種方法只有IE瀏覽器能用;可以引入外部檔案也可以在內部寫程式碼;
但是要等到文件解析完才能執行(也就是dom樹解析完畢,而不是載入完畢);
2、async屬性,用法:
<script type="text/javascript" src="example.js" async="async"></script>
這個方法適用於除IE外的其他瀏覽器,是HTML5的新屬性;
只能外部引用檔案,即具有src屬性;
載入完example.js就立即執行;
由此可見,上面兩種方法都存在相容性的問題;那麼就出現了第三種方法即按需載入;(還未使用,暫不貼程式碼了);