一个老话题很多讨论... 我读了很多,但仍不确定...
找到Bootstrap-4 JS脚本以获得最佳性能的最佳位置和最佳脚本标签(延迟/异步)是什么?
在Bootstrap文档中:“将以下s放在页面结尾附近,就在紧闭标记
之前</body>
他们不使用任何脚本标签(延迟/异步)
我了解了脚本标签, 一些人写道,在正文关闭标签之前定位脚本就像在“ defer”标签上定位标题一样。 (旧版浏览器除外) 有人说“如果脚本仍在末尾,性能会更好,因为稍后会下载它们”。
以下是最佳做法吗?
在主体关闭标签之前找到jquery / popper / bootstrap,首先jquery并使用defer到popper.min.js和bootstrap.min.js?
<body>
......
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script defer src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" ></script>
</body>
或者只是在没有“ defer”标记的引导文档中进行操作?
答案 0 :(得分:1)
最后输入是最佳实践,您甚至可以在正文关闭后编写脚本:html从顶部加载到按钮,当浏览器到达脚本元素时,它下载(并等待)源,因此,如果将其放在末尾,则会加载该页面,然后下载js。请记住,需要使用js才能使视图动态化,因此在页面加载之前,您不需要像以下功能:单击dropdwon并查看其内容。延迟/异步只是获得相同结果的一种方法,但是并不完全相同。
答案 1 :(得分:0)
最好的做法是在文档开头排除所有依赖项。 <head>
正是为此而生。由于在页面加载的那一刻没有加载 DOM,这将使在那里对 DOM 的所有引用失败。曾经有一段(黑暗)时间,在 defer 之前,通常会得到建议将脚本包含放在 </body>
之后但在 </html>
之前。
但是如果脚本资源确实加载在header中,有一些更好的解决方案来处理这个:
一个技巧是等待 DOM 加载 DOMContentloaded
event handler。一旦 DOM 加载并准备好,该事件就会触发。这可以与 async
结合使用以加快页面加载的感知速度。
很长一段时间以来,可以将 JavaScript 的执行推迟到页面加载之后。 defer
上的属性 script src=
将按引用顺序对 JavaScript 进行排队。
属性 async
不一定会在页面加载后执行脚本,它只是建议浏览器不要等待 JavaScript(块)的下载和执行,而是与页面渲染并行执行。加载顺序无法保证。
这适用于不直接依赖于页面内容或其他资源的 JavaScript 业务逻辑。 (https://javascript.info/script-async-defer)。包括 bootstrap.min.js
和 async
很可能无法产生预期的结果。
目前,但这很可能会改变,没有诡计,WordPress 不会推迟 JavaScript。你可以依靠插件来做到这一点,或者add a simple function到你的functions.php
如果 JavaScript 不是从 src
文件中读取而是直接包含的 defer
和 async
将被忽略。如果内联 JavaScript 需要等待 DOM 加载,请使用事件侦听器或确实将 <script></script>
放在之后但之前(如果代码在 <html>
之后,大多数浏览器都可以。html5 {{1 }}-tag 实际上是可选的)
回答你的问题:我不清楚为什么 Bootstrap 不使用或记录 defer 用于他们的脚本。最后,他们甚至摆脱了对 jQuery 的依赖,所以我看不出他们为什么仍然document 那样做。