【发布时间】:2021-11-01 22:37:30
【问题描述】:
几天前我已将 Sentry 与我的网站集成,我注意到有时用户会在其控制台中收到此错误:
ChunkLoadError: Loading chunk <CHUNK_NAME> failed.
(error: <WEBSITE_PATH>/<CHUNK_NAME>-<CHUNK_HASH>.js)
所以我在网上调查了这个问题,发现了一些类似的案例,但与会话期间的发布更新或缓存问题导致的块丢失有关。
这些情况和我的主要区别在于失败的块实际上可以从浏览器访问,因此加载错误不取决于块哈希的发布后刷新,而是 (我猜) em>,来自一些与网络相关的问题。 此统计数据强化了这一假设:所涉及的设备中约有 90% 是移动设备。
最后,我提出了一个问题:我是否应该以某种方式解决问题(例如,如果失败则重试块加载) 还是最好直接忽略它并让用户手动刷新?
2021.09.28 编辑:
一个月后,问题仍然存在,但我没有收到用户的任何报告,而且我一直在用 Hotjar 记录用户会话,但到目前为止没有发现任何相关内容。
我最近与 Sentry 支持人员聊天,帮助我排除了与网络相关的假设:
我们的 React SDK 默认没有离线缓存,当捕获到错误时,它将在那个时候发送。如果应用无法连接到 Sentry 发送事件,该事件将被丢弃,SDK 将不再尝试发送。
来自哨兵的鲁道夫
我可以确认这个问题很不寻常,我与您分享另一个有趣的统计数据:自第一次出现以来受影响的用户是 332.227 名唯一访问者中的 882 名 (~0.26%),但我注意到 90% 的事件来自 iOS(不是我一个月前注意到的通用移动设备),所以如果我计算与 iOS 用户相同的比例(794(882 的 90% )在 128.444 中)我们接近 0.62%。仍然很小,但在 iOS 上肯定更相关。
【问题讨论】:
-
我们也面临同样的问题。这些不是不再存在的旧块,这些块肯定仍然可用并且可以加载。显然对于某些用户来说,该块在某些时候不可用。网络问题可能是一个原因,但这似乎应该是相当罕见的(人们多久加载一次页面,然后失去互联网连接?)很想知道为什么会发生这种情况以及是否有任何好的解决方案。
-
@you786 - 这个块有什么特别像大的吗?你有错误的完整堆栈跟踪吗?
-
@Newbie,不,实际上大多数块都很小。我刚刚检查的一个小于 1kb。我确实有一个堆栈跟踪。第一行是webpack中的一些代码:
webpack:///webpack/bootstrap,然后是[native code],然后我们app定义了一个lazyImport函数,定义为:return import( /* webpackChunkName: "[request]" */ "../" + moduleName )。 -
你能复制这个问题吗?目前,我只能做一个假设。惰性块准备好后,它应该调用在请求它的文件中定义的函数。如果调用该函数,则块状态将从 loading 更改为 done。但是,如果未调用该 fn,则会引发该错误。例如,如果您在
main.js文件中有动态import(),则输出的文件对应。到main.js将具有负责引发该错误的逻辑。 -
感谢@morganney 的关注!我知道这是因为我试图访问其中一些块(文件名在错误跟踪中)并且它们都返回了正确的内容。此外,如果问题与不断变化的哈希有关,我应该会在版本附近看到一些峰值,而不是错误频率,它会随着时间的推移保持不变。
标签: javascript webpack console.log code-splitting