为什么在反复刷新使用 WebAssembly 的页面后 Chrome 最终抛出 "Out of memory: wasm memory"?
Why does Chrome eventually throw "Out of memory: wasm memory" after repeatedly refreshing a page that uses WebAssembly?
我相信刷新浏览器window或标签页不会泄漏。不幸的是,当涉及到 WebAssembly 时,情况似乎并非如此。
我用 Rust 构建了一个 WebAssembly crate。 crate 的编译大小约为 360 Kb(在内容压缩之前),并且 crate 在 Firefox 中工作得很好,甚至在 iOS 上的 Safari 上也能正常工作。但是,我在 Chrome 中遇到了很多问题,其中之一是刷新使用 .wasm
的页面最终会导致控制台出现内存不足错误。
该页面可以正常刷新大约 35 次,然后抛出以下内容:
Uncaught (in promise) RangeError: WebAssembly Instantiation: Out of memory: wasm memory
在此之后,该选项卡就没有用了,但打开一个新选项卡并加载页面会按预期工作——同样,大约前 35 次刷新。
这是浏览器的错误还是我的代码有问题?如果它是一个错误,有没有办法解决它? (并不是说我希望它会在生产中表现出来,但无论如何......)
(推测报错中提到的promise是import('...')
返回的promise。我用的是webpack所以受到了https://github.com/webpack/webpack/issues/6615的影响)
这显然是 Chrome 中已确认的错误:https://bugs.chromium.org/p/chromium/issues/detail?id=935169
只有在 Chrome 的开发者工具打开时才会出现。
我相信刷新浏览器window或标签页不会泄漏。不幸的是,当涉及到 WebAssembly 时,情况似乎并非如此。
我用 Rust 构建了一个 WebAssembly crate。 crate 的编译大小约为 360 Kb(在内容压缩之前),并且 crate 在 Firefox 中工作得很好,甚至在 iOS 上的 Safari 上也能正常工作。但是,我在 Chrome 中遇到了很多问题,其中之一是刷新使用 .wasm
的页面最终会导致控制台出现内存不足错误。
该页面可以正常刷新大约 35 次,然后抛出以下内容:
Uncaught (in promise) RangeError: WebAssembly Instantiation: Out of memory: wasm memory
在此之后,该选项卡就没有用了,但打开一个新选项卡并加载页面会按预期工作——同样,大约前 35 次刷新。
这是浏览器的错误还是我的代码有问题?如果它是一个错误,有没有办法解决它? (并不是说我希望它会在生产中表现出来,但无论如何......)
(推测报错中提到的promise是import('...')
返回的promise。我用的是webpack所以受到了https://github.com/webpack/webpack/issues/6615的影响)
这显然是 Chrome 中已确认的错误:https://bugs.chromium.org/p/chromium/issues/detail?id=935169
只有在 Chrome 的开发者工具打开时才会出现。