【发布时间】:2019-11-20 21:20:17
【问题描述】:
我有一个使用 wasm 的工作页面,在 Chrome 上编译需要 5 秒。我正在关注这篇文章:
https://v8.dev/blog/v8-release-75#implicit-caching
关于使缓存在第二次重新加载时工作的隐式缓存。当我每次重新加载页面时需要 5 秒来编译。
我正在使用WebAssembly.instantiateStreaming 来获取获取响应。
使用Chrome DevTool可以看到服务器return 304(但是fetch对象的状态是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);
})();
我没有收到任何错误,一切都按预期工作,但没有缓存。
【问题讨论】:
-
你启用缓存了吗?..
about:flags->WebAssembly compiled module cache,没有手动启用我相信它只是稳定通道atm的1%。 -
启用
WebAssembly compiled module cache无效。 -
出于好奇,您的程序集超过 128 kB,因为目前它不会缓存小于此值。还要确保您的后端发送
application/wasm作为它的内容类型。 -
我的程序集是 3.5 兆,是的,服务器返回
application/wasm -
抱歉,这里的想法用完了。一切看起来和听起来都应该缓存。在这里疯狂刺伤,在 Chrome 的网络选项卡中,您没有不小心点击
disable cache,其他资产似乎可以缓存吗?.. 我认为您可以尝试的唯一其他事情,而不是首先获得 304,尝试将您的服务器标头设置为较长的缓存时间,并使用缓存清除进行更新。
标签: javascript google-chrome caching google-chrome-devtools webassembly