WebAssembly隐式缓存在Chrome 75上不起作用

时间:2019-07-11 08:03:53

标签: javascript google-chrome caching google-chrome-devtools webassembly

我有一个wasm工作页面,需要5秒钟才能在Chrome上进行编译。我正在关注这篇文章:

https://v8.dev/blog/v8-release-75#implicit-caching

关于隐式缓存,以使缓存在第二次重新加载时起作用。当我每次重新加载页面时,需要5秒钟的时间进行编译。

我正在使用WebAssembly.instantiateStreaming来获取访存响应。 使用Chrome DevTool,我可以看到服务器return 304(但获取对象的状态为200

wasm的大小为3.5兆,服务器返回正确的Content-Type标头:application/wasm

使用跟踪时

https://v8.dev/blog/wasm-code-caching#tracing

要调试V8 behaviour,我可以看到它写入了缓存v8.wasm.cachedModule,但从未读取。我没有v8.wasm.moduleCacheHit也没有v8.wasm.moduleCacheInvalid 因为每次跑步都是冷战。

启用WebAssembly compiled module cache无效。

(async () => {
  const fetchPromise = fetch('mybig.wasm');
  const { instance } = await WebAssembly.instantiateStreaming(fetchPromise, importObject);
  console.log(instance);
})();

我没有收到任何错误,一切正常,但没有缓存。

1 个答案:

答案 0 :(得分:0)

这是Chrome 75中的错误。我编译的Web程序集为46兆,它写入了迹线v8.wasm.cachedModule,但无法将其实际添加到缓存中。 使用Chrome 77可以解决此问题。

https://bugs.chromium.org/p/chromium/issues/detail?id=719172#c63