我总是将脚本标记放在页面底部,因为在HTML/CSS和文本加载完成之后加载脚本是一种很好的做法.我刚刚发现了defer属性,它基本上做了同样的事情,就是在获取和执行脚本之前等待页面完成加载.
因此,如果使用defer属性,是否有必要将脚本标记物理地放置在页面底部和头部标记内?
我发现将脚本标记保留在head部分中的可读性更好.
<script src="script.js" defer="defer"></script>
Run Code Online (Sandbox Code Playgroud)
要么
<script defer="defer">
// do something
</script>
Run Code Online (Sandbox Code Playgroud)
目前的最佳做法?除非需要支持较旧的浏览器(IE <10,Opera Mini等),否则请按顺序使用延迟脚本,除非使用97.45%的浏览器(参考)
为什么?使用时defer,解析就像完成脚本一样,就像我们将脚本放在body标签的末尾一样,但是总体而言脚本执行早于完成,因为脚本是与HTML解析并行下载的。这种情况将触发domInteractive用于页面加载速度的更快事件。使用时async,脚本的执行顺序会因提取脚本的速度而异,因此可以损害顺序。此外,async脚本以内联方式执行并暂停HTML的解析。