1. 程式人生 > >非同步載入JS之async、defer

非同步載入JS之async、defer

繼前面瞭解的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就立即執行;

由此可見,上面兩種方法都存在相容性的問題;那麼就出現了第三種方法即按需載入;(還未使用,暫不貼程式碼了);