summaryrefslogtreecommitdiff
path: root/tools/code_cache/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'tools/code_cache/README.md')
-rw-r--r--tools/code_cache/README.md38
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).