為什么需要異步加載js文件:
不使用異步,文檔在加載js代碼時會阻塞其他資源的下載,導致空白頁面。
(1)置于頂部的js腳本,瀏覽器在執行時需要花費時間去下載外鏈文件的代碼并執行,此時會導致明顯的延遲,顯示為空白頁面,用戶無法瀏覽內容,也無法與頁面進行交互。
(2)雖然IE8、Firefox3.5、Safari4、Chrome2都允許并行下載Javascript文件,腳本的下載過程不會互相影響,但頁面的加載仍舊需要等到所有的Javascript代碼下載并執行完成才能繼續。正因為如此,推薦將<script>標簽置于<body>的底部。
(3)由于每個<script>標簽下載時都會阻塞頁面渲染,因此推薦減少<script>標簽的使用。不僅對于外鏈腳本,內嵌腳本也是如此。瀏覽器在解析HTML頁面時每遇到一個<script>標簽都會因執行腳本而導致一定的延時。此外,考慮到HTTP請求帶來額外的性能開銷,下載單個100KB的文件將比下載4個25KB的文件更快。
defer和async的用法:
相同點:defer和async均是用來異步加載腳本。采用并行下載,在下載過程中不會產生阻塞。
不同點:
defer:
(1)即可用于加載外部腳本,也可用于加載內嵌腳本。內嵌腳本僅限于IE9及以下,主流瀏覽器根據W3C的HTML5規范:defer僅當src屬性聲明時生效。
如:
//外部腳本<script src="1.js" defer></script>//內嵌腳本<script defer> console.log("defer");</script>
(2)帶有defer屬性的<script>標簽可以放在頁面的任何位置,對應的Javascript文件會在頁面解析到<script>標簽時開始下載,但不會執行,DOM加載完成后執行(在onload事件之前調用)。
async:
(1)只用于外部腳本。
(2)async加載完成后立即執行。
附:defer屬性的瀏覽器支持情況詳見:https://caniuse.com/#feat=script-defer,搜索defer即可。
為什么需要異步加載js文件:
不使用異步,文檔在加載js代碼時會阻塞其他資源的下載,導致空白頁面。
(1)置于頂部的js腳本,瀏覽器在執行時需要花費時間去下載外鏈文件的代碼并執行,此時會導致明顯的延遲,顯示為空白頁面,用戶無法瀏覽內容,也無法與頁面進行交互。
(2)雖然IE8、Firefox3.5、Safari4、Chrome2都允許并行下載Javascript文件,腳本的下載過程不會互相影響,但頁面的加載仍舊需要等到所有的Javascript代碼下載并執行完成才能繼續。正因為如此,推薦將<script>標簽置于<body>的底部。
(3)由于每個<script>標簽下載時都會阻塞頁面渲染,因此推薦減少<script>標簽的使用。不僅對于外鏈腳本,內嵌腳本也是如此。瀏覽器在解析HTML頁面時每遇到一個<script>標簽都會因執行腳本而導致一定的延時。此外,考慮到HTTP請求帶來額外的性能開銷,下載單個100KB的文件將比下載4個25KB的文件更快。
defer和async的用法:
相同點:defer和async均是用來異步加載腳本。采用并行下載,在下載過程中不會產生阻塞。
不同點:
defer:
(1)即可用于加載外部腳本,也可用于加載內嵌腳本。內嵌腳本僅限于IE9及以下,主流瀏覽器根據W3C的HTML5規范:defer僅當src屬性聲明時生效。
如:
//外部腳本<script src="1.js" defer></script>//內嵌腳本<script defer> console.log("defer");</script>
(2)帶有defer屬性的<script>標簽可以放在頁面的任何位置,對應的Javascript文件會在頁面解析到<script>標簽時開始下載,但不會執行,DOM加載完成后執行(在onload事件之前調用)。
async:
(1)只用于外部腳本。
(2)async加載完成后立即執行。
附:defer屬性的瀏覽器支持情況詳見:https://caniuse.com/#feat=script-defer,搜索defer即可。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com