script标签
Contents
概述
script
元素就是通过直接在页面嵌入 JS 代码或者通过加载外部脚本文件。
正常来说浏览器解析文档时遇到script
会依次等代码下载、执行完以后才会继续解析,因此现在Web应用程序一般都会把引用的JS代码放在<body>
元素的后面。了解决这个引入顺序问题,在script
标签上提供了async
和defer
这两个属性。
属性
defer
延迟脚本,浏览器立即下载脚本,但是不会阻塞后面DOM的解析,脚本会延迟到DOM解析完后再去执行。
async
异步脚本,浏览器立即下载脚本,但是不会阻塞后面DOM的解析,哪个脚本先加载完就先执行,而且是加载完就立马执行。如果有DOM正在解析,会阻塞解析。
当script同时有async和defer属性时,执行效果和async一致。
推荐的应用场景
defer
如果你的脚本代码依赖于页面中的DOM
元素(文档是否解析完毕),或者被其他脚本文件依赖。
例:
- 评论框
- 代码语法高亮
polyfill.js
async
如果你的脚本并不关心页面中的DOM
元素(文档是否解析完毕),并且也不会产生其他脚本需要的数据。
例:
- 百度统计
如果不太能确定的话,用defer
总是会比async
稳定。。。