diff options
Diffstat (limited to 'tools/code_cache/README.md')
-rw-r--r-- | tools/code_cache/README.md | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tools/code_cache/README.md b/tools/code_cache/README.md new file mode 100644 index 0000000000..f8428c24b0 --- /dev/null +++ b/tools/code_cache/README.md @@ -0,0 +1,38 @@ +# Node.js code cache builder + +This is the V8 code cache builder of Node.js. It pre-compiles all the +JavaScript native modules of Node.js and serializes the code cache (including +the bytecodes) that will be embeded into the Node.js executable. When a Node.js +JavaScript native module is `require`d at runtime, Node.js can deserialize from +the code cache instead of parsing the source code and generating the bytecode +for it before execution, which should reduce the load time of these JavaScript +native modules. + +## How it's built and used + +The code cache builder is built with the `mkcodecache` target in `node.gyp` +when `node_use_node_code_cache` is set to true, which is currently done by +default. + +In the default build of the Node.js executable, to embed the V8 code cache of +the native modules into the Node.js executable, `libnode` is first built with +these unresolved symbols: + +- `node::native_module::has_code_cache` +- `node::native_module::NativeModuleEnv::InitializeCodeCache` + +Then the `mkcodecache` executable is built with C++ files in this directory, +as well as `src/node_code_cache_stub.cc` which defines the unresolved symbols. + +`mkcodecache` is run to generate a C++ file +`<(SHARED_INTERMEDIATE_DIR)/node_code_cache.cc` that is similar to +`src/node_code_cache_stub.cc` in structure, but contains the code cache data +written as static char array literals. Then `libnode` is built with +`node_code_cache.cc` to produce the final Node.js executable with the code +cache data embedded. + +For debugging, Node.js can be built without code cache if +`--without-node-code-cache` is passed to `configure`. Note that even if the +code cache is not pre-compiled and embedded into the Node.js executable, the +internal infrastructure is still used to share code cache between the main +thread and worker threads (if there is any). |