我应该使用延迟的脚本已经在底部的身体标签之前

Should I use defer on script which are already at just before the bottom body tag?

本文关键字:底部 标签 延迟 脚本 我应该      更新时间:2023-09-26

每当我把js文件放在页面底部时,这个问题总是困扰着我。如果我把所有的js文件在关闭body标签之前的底部,那么我认为浏览器将首先下载所有的html和样式表,然后它会解析html和css,最后它会发送请求的js文件。

  • 在js文件上使用defer已经在底部有任何区别吗?
  • 在正文标签渲染阻塞之前结束非延迟脚本吗?

我的另一个问题是,如果我把所有的js文件在头部和使用defer对他们。这是否等同于将所有js文件放在底部?是否会在head中看到延迟浏览器向服务器发出请求,然后继续下载其余的html文件,或者仅在下载所有html和css后才向服务器发出请求?

据我所知,async相当于defer,唯一的区别是js将在下载时执行,而不尊重文件的顺序。

  • 在js文件上使用async,这些文件已经在底部,除了从它们执行的顺序有任何不同吗?

查看HTML 5.2脚本规范,可以看到W3C使用的这张图。

我们在这里看到的是,使用defer在解析HTML时获取脚本,但要等到解析结束后才执行。

另一方面,

async在解析的同时获取,一旦获取完成,HTML呈现将暂停以执行脚本。

由于HTML的执行是同步的,因此可以假设在</head>之前的脚本上使用defer几乎就像将它们放在</body>之前一样。

然而,正如Chris Moschini所说,我不会信任defer。我觉得这个StackOverflow的答案作为一个整体可以更好地解释defer是如何影响加载javascript的

defer属性是一个布尔属性。

当出现时,它指定在页面完成解析时执行脚本。

注意:defer属性只适用于外部脚本(应该只在src属性存在的情况下使用)。

我发现这篇文章解释得很好:https://flaviocopes.com/javascript-async-defer/

理想情况下,最佳实践是使用

相关文章: