我可以使用<script async =“”>加载babel-polyfill吗?

时间:2016-11-23 10:39:06

标签: javascript html reactjs html5 babel

我的页面上有一个模式对话框,当用户与页面进行某些交互时会弹出该对话框。

&#xA;&#xA;

我使用React并使用webpack创建了一个整洁的小包,通过脚本标记包含在我的页面中。

&#xA;&#xA;

因为它使用Generators而我必须支持Internet Explorer 11,所以我需要 babel-polyfill ,所以我的HTML代码如下所示:

&#xA;&#xA;
 < code>&lt; script src =“// cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.9.1/polyfill.min.js"></script>
<script src = “/survey-modal.js”async&gt;&lt; / script&gt;&#xA;  
&#xA;&#xA;

困扰我的是我正在加载Babel polyfill同步。如果我将 async 添加到第一个脚本标记,我的代码可以正常工作,但我不确定这是否是确定性的,即代码是否只是偶然的,因为polyfill在调查之前完成加载 - 模式脚本。

&#xA;&#xA;

从CDN加载babel-polyfill时,使用&lt; script async&gt; 是否安全?

& #xA;

3 个答案:

答案 0 :(得分:3)

  

装载babel-polyfill时使用是否安全   CDN?

不,不是。 async脚本“一旦可用就执行”,并且不保证执行顺序。所以在下面的例子中:

<script src="polyfill.min.js" async></script>
<script src="survey-modal.js" async></script>

“polyfill”脚本有可能在“survey-modal”之后执行。更好的方法如下:

<script src="polyfill.min.js" defer></script>
<script src="survey-modal.js" defer></script>
在解析文档后下载

defer脚本(因此它不会阻止页面呈现),但保证执行顺序。

PS:您提到当两个脚本都是异步时您的代码都能正常运行。是的,这是偶然的。当从浏览器缓存加载polyfill时它将起作用,如果通过网络获取polyfill,它可能无效。

答案 1 :(得分:0)

如果使用异步标记,则不能保证它会在模式之前加载,所以我不会那样使用它。

答案 2 :(得分:0)

不,它不是确定性的,也不会一直有效。

如果你愿意,你可以在chrome上使用限制,看看当下载速度很低时,它总是无法正常工作。