设置是否会延迟我的polyfill和其他脚本,以确保它们按顺序加载?

时间:2017-10-30 09:21:39

标签: javascript asynchronous polyfills

我使用polyfill.io来填充Promise并获取旧版客户端。在their website上,他们建议使用脚本加载器或其回调来确保脚本在运行现代代码之前已完全加载:

  

我们建议使用async和defer属性   从polyfill服务加载但从我们加载的标签   非阻塞方式意味着您无法确定自己是否存在   代码将在polyfill加载完成之前或之后执行。

     

在尝试运行自己的涂料之前确保涂料已存在   代码,您可以将onload处理程序附加到https://cdn.polyfill.io   脚本标记,使用更复杂的脚本加载器或只是使用我们的   回调参数,用于在polyfill时评估全局回调   加载:

但是,不应该在两个脚本上设置defer已经保证它们被加载为异步但仍然按照它们在文档中出现的顺序(除非浏览器不支持延迟) ?

<script src="https://cdn.polyfill.io/v2/polyfill.min.js" defer></script>
<script src="modernscript.js" defer></script>

1 个答案:

答案 0 :(得分:1)

根据MDN documentation //read_second var test = require(../read_first.js) test.create("argument").method_I_Need("argument"); //not working 属性,只定义了加载脚本时的页面加载时间。

从您引用的文档可以看出:

  

在尝试运行自己的涂料之前确保涂料已存在   代码,您可以将onload处理程序附加到https://cdn.polyfill.io   脚本标签

由于(正如对此答案的评论所指出的),如果defer脚本将被执行(12)并且考虑到可能,则无法清楚地看到它浏览器实现差异 - 依赖此类行为可能不是最好的主意。

更好的方法是:

  1. 使用一些脚本加载器(例如RequireJS
  2. 将建议的defer处理程序添加到第一个onload代码并创建动态<script>代码,以便在此处理程序中加载代码
  3. 将您的代码与Promise polyfill捆绑在一起(手动或使用像webpack这样的捆绑器)并加载为单个捆绑包。