Javascript WebAssembly隐式缓存不';不要在铬75上工作
我有一个wasm的工作页面,在Javascript WebAssembly隐式缓存不';不要在铬75上工作,javascript,google-chrome,caching,google-chrome-devtools,webassembly,Javascript,Google Chrome,Caching,Google Chrome Devtools,Webassembly,我有一个wasm的工作页面,在Chrome上编译需要5秒钟。我关注这篇文章: 关于隐式缓存使缓存在第二次重新加载时工作。当我每次重新加载页面时,编译需要5秒钟 我使用的是WebAssembly.instantiateStreaming,它获得一个获取响应。 使用Chrome DevTool,我可以看到服务器返回304(但是获取对象的状态是200) wasm大小为350万,服务器返回正确的内容类型标题:application/wasm 当我使用跟踪时 要调试V8行为,我可以看到它编写缓存V8.
Chrome
上编译需要5秒钟。我关注这篇文章:
关于隐式缓存使缓存在第二次重新加载时工作。当我每次重新加载页面时,编译需要5秒钟
我使用的是WebAssembly.instantiateStreaming
,它获得一个获取响应。
使用Chrome DevTool,我可以看到服务器返回304(但是获取对象的状态是200
)
wasm
大小为350万,服务器返回正确的内容类型标题:application/wasm
当我使用跟踪时
要调试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中的一个bug。我编译的webassembly是46兆,它编写跟踪
v8.wasm.cachedModule
,但实际上无法将其添加到缓存中。
使用Chrome 77解决此问题
是否已启用缓存
about:flags
->WebAssembly编译模块缓存
,如果不手动启用,我相信它只占稳定通道atm的1%。启用WebAssembly编译模块缓存
没有效果。出于好奇,您的程序集大于128 kB,因为当前它的缓存不会小于此值。另外,请确保您的后端正在发送内容类型为的application/wasm
。我的程序集是350万,是的,服务器返回application/wasm
,抱歉,这里没有主意了。所有东西看起来和听起来都应该缓存。在Chrome的“网络”选项卡中,您没有意外点击“禁用缓存”,其他资产是否显示缓存正常?。。我认为您唯一可以尝试的另一件事是,不要首先获得304,而是尝试将服务器头设置为长缓存时间,并使用缓存破坏进行更新。