首页 > 解决方案 > 在 Chrome 上使用 RESULT_CODE_KILLED_BAD_MESSAGE 构建大型 JS Blob 崩溃选项卡

问题描述

我正在从大量较小的 blob 客户端构建一个大型(多 gb)Blob,以上传到 Firebase 存储。但是,当我在数组上调用 blob 构造函数时,Chrome 选项卡会冻结一段时间然后崩溃。当 Blob 较小(数百 mb)时,它可以正常工作 Chrome 文档建议我不应该使大 blob 变得如此之快:

创建大 Blob 太快

创建大量 blob,特别是如果它们是非常大的 blob,可能会导致渲染器内存增长过快并导致渲染器端出现 OOM。这是因为渲染器在等待浏览器请求时临时存储 blob 数据。同时,Javascript 可以继续执行。如果 blob 大到足以将其直接保存到文件中,则传输数据可能会花费大量时间,因为这意味着我们需要等待磁盘操作,然后渲染器才能删除数据。

如何更“慢”地创建它以便可以将其分页到磁盘?

标签: javascriptgoogle-chromeblobfirebase-storage

解决方案


我意识到问题不是我提供给 Blob 构造函数的数组中 blob 的大小,而是数组的大小。有数百万个小斑点。我更改了制作数组的 MediaRecorder 的 timeSlice,因此它每 10 秒生成大块而不是每 10ms 生成小块,并修复了它。


推荐阅读