有时候我们加载JS文件, 尤其是外链JS文件的时候,当文件加载过慢,或者文件加载出错的时候,有可能会阻塞整个页面的加载, 这时我们需要JS的异步加载, 有两个属性可支持异步加载
defer async
用法为:
<script type="text/javascript" async src="xxx.js"></script>
<script type="text/javascript" defer src="xxx.js"></script>
defer 和 async 的共同点是 都是可以并行加载JS文件,不会阻塞页面的加载, 不同点是 defer的加载完成之后, JS会等待整个页面全部加载完成了再执行, 而async是加载完成之后,会马上执行JS, 所以假如对JS的执行有严格顺序的话,那么建议用 defer加载。
以上两个属性有一种异常情况, 假如当要加载的 JS 有如下的代码逻辑:
document.write('xxxxx'); window.location='xxxx';
那么有可能会导致页面的一片空白,要谨慎使用