Javascript 在我的polyfill和其他脚本上设置defer会保证它们';按顺序重新加载?
我正在使用polyfill.io为老客户进行polyfill承诺和获取。在上,他们建议使用脚本加载程序或其回调,以确保在运行现代代码之前已完全加载脚本: 我们建议在上使用async和defer属性 从polyfill服务加载的标签,但在 非阻塞方式意味着您无法确定自己的 代码将在多边形填充完成加载之前或之后执行 在尝试运行自己的多边形填充之前,请确保多边形填充已存在 代码中,可以将onload处理程序附加到 脚本标记,使用更复杂的脚本加载器,或者只需使用 callback参数,用于在执行多边形填充时计算全局回调 加载: 但是,在两个脚本上设置Javascript 在我的polyfill和其他脚本上设置defer会保证它们';按顺序重新加载?,javascript,asynchronous,polyfills,Javascript,Asynchronous,Polyfills,我正在使用polyfill.io为老客户进行polyfill承诺和获取。在上,他们建议使用脚本加载程序或其回调,以确保在运行现代代码之前已完全加载脚本: 我们建议在上使用async和defer属性 从polyfill服务加载的标签,但在 非阻塞方式意味着您无法确定自己的 代码将在多边形填充完成加载之前或之后执行 在尝试运行自己的多边形填充之前,请确保多边形填充已存在 代码中,可以将onload处理程序附加到 脚本标记,使用更复杂的脚本加载器,或者只需使用 callback参数,用于在执行多边形填
defer
是否应该保证它们是异步加载的,但仍然按照它们在文档中的显示顺序加载(除非浏览器不支持defer)
根据延迟
属性,只定义了脚本加载时的页面加载时间点
从您提供的文档中可以看到:
在尝试运行自己的多边形填充之前,请确保多边形填充已存在
代码,您可以将onload处理程序附加到
脚本标记
由于(正如在对本答案的评论中所指出的)无法清楚地看到是否将执行defer
脚本(,),并且考虑到可能的浏览器实现差异,因此依赖这种行为可能不是最好的主意
因此,更好的方法是:
onload
处理程序添加到第一个
标记中,并创建动态
标记以将代码加载到此处理程序中如果你看这个答案,人们似乎相信延迟保证执行顺序。也在这里:。我之所以提到polyfill.io文档,正是因为它们的状态正好相反(但它们也在讨论defer与async的组合,这是不同的)。mozilla文档也没有对此发表任何评论。这很奇怪。我发现这可能是我的错误:正常的脚本加载过程是阻塞操作,
async
脚本是异步加载的,defer
脚本似乎定义了开始加载的不同时间点。polyfill.io文档建议同时添加async
和defer
属性,这就是他们建议添加onload
处理程序的原因。我将删除我的答案以避免混淆。可以通过,有其他->Mozilla开发者网络产品进入bug搜索/填充表单此答案中链接的MDN文档现在状态带有延迟属性的脚本将按照它们在文档中出现的顺序执行。
@PeterHerdenborg谢谢,我已经更新了答案
<script src="https://cdn.polyfill.io/v2/polyfill.min.js" defer></script>
<script src="modernscript.js" defer></script>