Description
According to this V8 blog post (which is from 2019 so might be out of date, but I couldn't find anything newer), WASM modules are only cached when using the compileStreaming
and instantiateStreaming
APIs. Both of these are supported by Node (implementation PR). Although MDN says Node doesn't support compileStreaming
, I have tested it and it exists and works as expected. Switching to these, and ideally just using instantiateStreaming
seems like it could provide substantial performance improvements in cases where users need multiple instances of the same module, or by allowing for the instantiation of modules in Worker
threads.
The *Streaming
APIs expect the Response
type return of a fetch
call, unfortunately Node's fetch
doesn't seem to support getting local files yet. Thankfully it is possible to manually construct a Response
object with a Content-Type: application/wasm
header that is accepted by the APIs.