【问题标题】:RequireJS Load timeout for modules: error detail模块的RequireJS加载超时:错误详细信息
【发布时间】:2016-02-23 05:52:35
【问题描述】:

我需要从 requireJS“模块加载超时”错误中公开更好的错误细节,以便我可以实际调试以找出导致加载超时的原因。

我无法让错误出现在我的开发机器上,但大约 10% 的日常访问者在生产环境中遇到此错误(track.js 用于收集这些错误以提高可见性)。

  • 我的 main.js 文件(“模块加载超时:main”)-应用程序入口点引发了错误。我添加了 errback 回调以尝试在此处记录错误详细信息,但此错误似乎并未命中此回调,因此似乎 main.js 所需的一切都很好。
  • 我为 requirejs.onError 添加了一个全局覆盖,我在这里得到的只是模块名称 (main.js) 和超时错误代码。
  • 我用过 madge 并验证没有循环依赖。
  • 我已经使用 r.js 优化器优化了构建。
  • 我在要求配置中设置了 waitSeconds: 0(据我了解应该完全禁用超时)

我怎样才能找出在某个地方需要的模块实际上是导致超时的原因?任何进一步的工作都会非常有帮助 - 我发现这非常难以追踪。谢谢。

【问题讨论】:

    标签: javascript requirejs amd js-amd


    【解决方案1】:

    你可以在requireJS的配置中设置waitSeconds。默认为 7 秒。我不知道您的问题的确切答案,但这可能是一个临时解决方案。可能来自用户的某些人的互联网速度非常慢。而且 7 秒还不够。

    您可以在Chrome devTools -> Network tab -> Throtling selector 中进行测试。并选择例如“2G 常规 450 kb/c”。我假设你会看到这个错误。另外,我使用CDN时有时会出现这个错误。

    【讨论】:

    • 我没有提到我已经将 waitSeconds 设置为 0。网络节流是个好主意。我将它设置为 2G 常规 - 有趣的是,我可以在网络面板中看到 main.js 脚本加载没有错误,但我仍然收到模块的加载超时:主要错误。
    • 您找到解决方案了吗? @cre8ive
    • 是的,来自詹姆斯·伯克本人。 .....但是,如果困难在于您的“main”需要很长时间才能加载,那么该脚本会使用 waitSeconds 保存 requirejs.config() 调用,并且它是通过 data-main 加载的,然后是 requirejs.config () 调用可能无法及时调用以使其有用。对于该问题,您可以使用“requirejs 作为初始配置”传递 waitSeconds。
    【解决方案2】:

    来自詹姆斯·伯克本人。 .....但是,如果困难在于您的“main”需要很长时间才能加载,那么该脚本会使用 waitSeconds 保存 requirejs.config() 调用,并且它是通过 data-main 加载的,然后是 requirejs.config () 调用可能无法及时调用以使其有用。对于该问题,您可以使用“requirejs 作为初始配置”传递 waitSeconds。

    <script>var requirejs = { waitSeconds: 0 };</script>
    <script src="require.js" data-main="main"></script>

    这非常有效。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 2015-08-22
      相关资源
      最近更新 更多