我有一个使用 wasm 的工作页面,在 Chrome
上编译需要 5 秒。我正在关注这篇文章:
https://v8.dev/blog/v8-release-75#implicit-caching
关于隐式缓存以使缓存为第二次重新加载工作。当我每次重新加载页面时需要 5 秒来编译。
我正在使用 WebAssembly.instantiateStreaming
获取获取响应。
使用 Chrome DevTool
我可以看到服务器返回 304
(但获取对象的状态为 200
)
wasm
大小为 3.5 兆,服务器返回正确的 Content-Type header :application/wasm
。
当我使用跟踪时
https://v8.dev/blog/wasm-code-caching#tracing
为了调试 V8 行为
,我可以看到它写入缓存 v8.wasm.cachedModule
但从未读取它。我没有得到 v8.wasm.moduleCacheHit
也没有 v8.wasm.moduleCacheInvalid
因为每次运行都是冷运行。
启用WebAssembly 编译模块缓存
没有效果。
(async () => {
const fetchPromise = fetch('mybig.wasm');
const { instance } = await WebAssembly.instantiateStreaming(fetchPromise, importObject);
console.log(instance);
})();
我没有收到任何错误,一切都按预期工作,但没有缓存。
最佳答案
这是 chrome 75 中的一个错误。我编译的 webassembly 是 46 兆,它写入跟踪 v8.wasm.cachedModule
但未能真正将其添加到缓存中。
使用 Chrome 77
解决了这个问题。
https://bugs.chromium.org/p/chromium/issues/detail?id=719172#c63
关于javascript - WebAssembly 隐式缓存在 Chrome 75 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56984394/