loading – Labjs是否推迟了已加载脚本的执行直到DOM准备好了?
作者:互联网
问题是关于http://labjs.com – 一个非阻塞的JavaScript加载和依赖项管理的很棒的库.
我已经阅读了文档,但我必须太累或者其他东西 – 我找不到关于DOM ready事件的任何内容.在DOM准备好之后是否执行脚本?
也许如果我这样做:
$LAB.script('my-library.js').wait(function(){
// interacting with DOM
});
它会安全吗?或者我应该使用某种$(function(){})等?
解决方法:
默认情况下,任何脚本加载器都会从页面的DOM-ready和onload事件中解除脚本加载的阻塞,至少是通过intent / definition.
所以,直截了当的答案是,NO,LABjs不会阻止脚本执行,直到DOM就绪. LABjs加载的一些脚本可以在DOM-ready之前运行,而其他脚本可以在DOM-ready之后运行.
如果您真的遇到代码需要等待DOM的情况,您应该使用像jQuery这样的框架并使用其内置的DOM-ready包装器$(document).ready(…)来使逻辑DOM准备就绪-安全.
但是,在很多情况下,人们认为他们需要等待DOM准备就绪,而他们确实不这样做:
>大多数人将DOM-ready与“所有脚本完成加载”混为一谈.如果您只是在等待DOM-ready,因为您需要确保所有脚本都已加载,这是一个错误且不正确的假设.相反,使用脚本加载器的工具来确定何时加载所有脚本,并在适当的时间运行它们,而不管DOM加载如何.使用LABjs,这就像将所有脚本放在一个$LAB链中一样简单,并且在链的末尾有一个最终的.wait() – 你可以确信你的.wait()回调中的代码将是在所有脚本加载并运行之前不运行.
>大多数人认为他们需要等待DOM准备好执行诸如附加事件处理程序或触发Ajax请求之类的事情.这也是一个不正确的假设.如果您的代码只是在DOM中查询要附加事件处理程序的元素,或者如果您根本不对DOM执行任何操作,而是进行Ajax调用,请不要将逻辑包装在DOM-ready包装器中.
>另一方面,许多人认为如果你的代码在body标签的末尾运行,那么你就不需要等待DOM-ready.错误.无论在何处指定代码,DOM-ready都可以使用DOM.
通常,您的代码真正需要包装在DOM-ready包装器中的唯一时间是它是否要修改DOM.否则,不要等待DOM-ready运行代码.关心什么是包装,什么不包装.
标签:javascript,loading,labjs 来源: https://codeday.me/bug/20190610/1211319.html