v8-compile-cache-lib

Fork of v8-compile-cachearrow-up-right exposed as an API for programmatic usage in other libraries and tools.


Build statusarrow-up-right

v8-compile-cache-lib attaches a require hook to use V8's code cachearrow-up-right to speed up instantiation time. The "code cache" is the work of parsing and compiling done by V8.

The ability to tap into V8 to produce/consume this cache was introduced in Node v5.7.0arrow-up-right.

Usage

  1. Add the dependency:

$ npm install --save v8-compile-cache-lib
  1. Then, in your entry module add:

require('v8-compile-cache-lib').install();

.install() in Node <5.7.0 is a noop – but you need at least Node 4.0.0 to support the ES2015 syntax used by v8-compile-cache-lib.

Options

Set the environment variable DISABLE_V8_COMPILE_CACHE=1 to disable the cache.

Cache directory is defined by environment variable V8_COMPILE_CACHE_CACHE_DIR or defaults to <os.tmpdir()>/v8-compile-cache-<V8_VERSION>.

Internals

Cache files are suffixed .BLOB and .MAP corresponding to the entry module that required v8-compile-cache-lib. The cache is entry module specific because it is faster to load the entire code cache into memory at once, than it is to read it from disk on a file-by-file basis.

Benchmarks

See https://github.com/cspotcode/v8-compile-cache-lib/tree/master/bench.

Load Times:

Module
Without Cache
With Cache

babel-core

218ms

185ms

yarn

153ms

113ms

yarn (bundled)

228ms

105ms

^ Includes the overhead of loading the cache itself.

Acknowledgements

  • The original v8-compile-cachearrow-up-right from which this library is forked.

  • FileSystemBlobStore and NativeCompileCache are based on Atom's implementation of their v8 compile cache:

    • https://github.com/atom/atom/blob/b0d7a8a/src/file-system-blob-store.js

    • https://github.com/atom/atom/blob/b0d7a8a/src/native-compile-cache.js

  • mkdirpSync is based on:

    • https://github.com/substack/node-mkdirp/blob/f2003bb/index.js#L55-L98

Last updated