提问者:小点点

使用“延迟”属性时是否需要将脚本放在页面底部?


我总是把我的脚本标签放在页面的底部,因为在超文本标记语言/CSS和文本完成加载后加载脚本是一种很好的做法。我刚刚发现了延迟属性,它基本上做了同样的事情,那就是它等待页面完成加载后才获取和执行脚本。

因此,如果使用defer属性,是否有必要将脚本标记实际放置在页面底部而不是head标记内部?

我发现它的可读性更好地保持脚本标签内的头部分。

<script src="script.js" defer="defer"></script>

<script defer="defer">

// do something

</script>

共3个答案

匿名用户

当前的最佳实践?在头部按顺序使用延迟脚本,除非您需要支持旧的浏览器(IE

为什么啊?使用延迟,解析就像我们把脚本放在body标记的末尾一样完成,但是总的来说,脚本执行会提前完成,因为脚本已经与超文本标记语言解析并行下载。此场景将触发用于提高页面加载速度的更快的domInteractive事件。使用async,脚本执行的顺序会根据脚本的读取速度而变化,因此顺序可能会受到影响。此外,async脚本被内联执行,并暂停超文本标记语言的解析。

匿名用户

自编写这些答案以来,最佳实践发生了变化,因为对defer属性的支持在全球范围内已增长到98%。

除非您需要为较旧的浏览器优化速度,否则您应该将脚本放在头部并标记为defer。这1)将所有脚本引用保留在一个位置(更易于维护),2)使浏览器更快地意识到脚本,从而更早地开始对资源进行优先级排序。

对于大多数页面,性能差异应该可以忽略不计,因为浏览器的预加载程序可能不会开始下载延迟的脚本,直到整个文档被解析。但是,这不应该有什么坏处,它会给浏览器留下更多的工作,这通常是最好的。

匿名用户

首先,并非所有浏览器都支持defer属性(一些确实支持它的浏览器只是忽略它)。将脚本放在页面底部可以确保在脚本执行之前,它上面的所有HTML元素都已加载到DOM中。另一种方法是使用onload方法或使用jQuery的DOM就绪函数。