Closed
Description
Currently SEA is focused on snapshotting. However it can be difficult to make a snapshot because (1) not everything is supported and (2) it can be hard for the developer to disentangle the various stages of startup into "snapshottable" and "not snapshottable" parts.
On the other hand V8 bytecode caching always works. In my testing bytecode caching can speedup initialization of some common Node executables (like yarn
, npm
) by ~10%. This is a pretty modest improvement but it's nearly free.
I think it would be interesting if SEA could also support "bytecode-only" caching, where:
- the source code is stored into the executable and loaded as a V8 external string,
- the bytecode is stored into the executable and used to speed up compilation.
This also has minor benefits for memory usage as the source code memory can be shared across different executables.
Alternatives:
- bytenode exists, but it's focused on obfuscation use cases, and not faster loading. Because of this it doesn't work in some cases, which makes it difficult to recommend as a general solution.
- v8-compile-cache exists and has been used by various projects. However it is pretty hacky in how it works (by monkey-patching
require
) and also is slower than it could be (since user-spacerequire
is pretty slow). - (You could also imagine Node.js persisting the cached bytecode to disk automatically like Python does with
__pycache__
, but that's sort of disjoint from this.)
Metadata
Metadata
Assignees
Labels
No labels