在Angular.js中使用<script async>标记

R.V*_*d.M 13 javascript performance asynchronous angularjs

Ilya Grigorik建议<script async>尽可能使用标签.

有没有使用标签加载Angular.js应用程序的干净,首选方法,而不使用require.js或angular-seed推荐的$ script.js工具?

显而易见的问题是执行顺序.例如,阻止:

Uncaught ReferenceError: angular is not defined
Run Code Online (Sandbox Code Playgroud)

https://www.igvita.com/2014/05/20/script-injected-async-scripts-considered-harmful/

maa*_*nus 2

如果有一些有用的东西可以在没有角度的情况下显示(例如,使用无头浏览器预先生成的内容)并且除了您的脚本依赖于它之外什么都没有那么可以有一个解决方案:

  • 负载angular.js使用async
  • 将代码封装在函数体中
  • 添加一个循环检查是否angular已定义
    • 如果没有的话就睡几毫秒
    • 否则,执行代码并跳出循环

这种忙碌的等待很难看,但我不知道加载完成后如何回调。可能有效也可能无效,我还没有尝试过。

很可能我什么也没做,只是框架所做的事情的原始版本。

如果您不需要它在所有浏览器中工作,那么就可以使用该defer标签。对我来说,defer看起来async做得不错。


1所以我想,angular-route.js或类似的用户运气不好。这只是一个猜测,因为我从未尝试过乱序加载这两个。