如果在HTML页面上使用普通脚本标记,则在下载和解析脚本之前,将阻止呈现。为避免这种情况,为了加快页面显示速度,您可以添加“async'属性,告诉浏览器继续处理页面而不等待该脚本。但是,这固有意味着引用该脚本中任何内容的其他javascript可能会崩溃,因为它所需的对象尚未存在。
据我所知,没有allScriptsLoaded事件你可以绑定,所以我正在寻找模拟一个的方法。
我知道以下策略可以推迟运行其他代码,直到异步脚本可用:
我错过了什么,还是最先进的?
答案 0 :(得分:0)
你可能希望的最好的方法是知道是否有任何未完成的异步调用(XMLHttpRequest,setTimeout,setInterval,SetImmediate,process.nextTick,Promise),并等待那里不是一个。但是,这是底层本机代码丢失的实现细节 - javascript只有自己的事件循环,如果我理解正确,异步调用将传递给本机代码。最重要的是,您无权访问事件循环。您只能插入,无法读取或控制流程(除非您在io.js和feeling frisky中)。
模拟一个的方法是自己跟踪脚本调用,并在所有脚本完成后调用。 (即,每次将相关脚本插入事件循环时进行跟踪。)
但是,DOM没有提供NoAsyncPending全局或其他东西,这是你真正需要的。