gpt4 book ai didi

loading - Labjs 是否会推迟加载脚本的执行,直到 DOM 准备就绪?

转载 作者:搜寻专家 更新时间:2023-11-01 05:17:08 28 4
gpt4 key购买 nike

问题是关于 http://labjs.com – 一个很棒的非阻塞 JavaScript 加载和依赖管理库。

我已经阅读了文档,但我一定是太累了或者什么的——我找不到任何关于 DOM 就绪事件的信息。脚本是否在 DOM 就绪后执行?

也许如果我这样做:

$LAB.script('my-library.js').wait(function(){ 
// interacting with DOM
});

会安全吗?或者我应该使用某种 $(function() {}) 等?

最佳答案

默认情况下,任何脚本加载器都会从页面的 DOM-ready 和 onload 事件中解锁脚本加载,至少按意图/定义是这样。

所以,直截了当的答案是,不,LABjs 在 DOM 就绪之前不会阻止脚本执行。 LABjs 加载的一些脚本可能在 DOM 就绪之前运行,而其他脚本可能在 DOM 就绪之后运行。

如果您确实遇到代码需要等待 DOM 的情况,您应该使用像 jQuery 这样的框架并使用其内置的 DOM 就绪包装器 $(document).ready(...)使该逻辑 DOM 就绪安全。

但是,在很多情况下,人们认为他们需要等待 DOM 就绪,而实际上他们不需要:

  1. 大多数人将 DOM 就绪与“所有脚本都已完成加载”混为一谈。如果您只是因为需要确保所有脚本都已加载而只是等待 DOM 准备就绪,那么这是一个错误且不正确的假设。相反,使用脚本加载器的工具来确定何时加载所有脚本,并在适当的时间运行它们,而不考虑 DOM 加载。使用 LABjs,这就像将所有脚本放在一个 $LAB 链中一样简单,并拥有一个最终的 .wait()。在链的末端——您可以放心,您的代码在 .wait() 中在所有脚本加载并运行之前,回调不会运行。

  2. 大多数人认为他们需要等待 DOM 就绪才能执行附加事件处理程序或触发 Ajax 请求等操作。这也是一个错误的假设。如果您的代码只是在 DOM 中查询要附加事件处理程序的元素,或者如果您根本不对 DOM 做任何事情,而是进行 Ajax 调用,请不要将您的逻辑包装在 DOM 就绪包装器中。

  3. 另一方面,许多人认为如果您的代码在 body 标记的末尾运行,那么您无需等待 DOM 准备就绪。错误的。 DOM-ready 就是 DOM-ready,无论您的代码在何处指定。

一般来说,只有当您的代码要修改 DOM 时,您的代码才真正需要包装在 DOM 就绪包装器中。否则,不要等待 DOM-ready 来运行您的代码。明智地判断包装的内容和未包装的内容。

关于loading - Labjs 是否会推迟加载脚本的执行,直到 DOM 准备就绪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com