preparing special versions of 5.8 that are ABI compatible to 6.0 (Node.js LTS) • Allow Node.js to upgrade to the new pipeline as a non-breaking change • simpler script execution pipeline; reduce jank; make the interchange between V8’s various components more efficient
have a small memory footprint (machine code generated by V8’s full- codegen compiler is verbose) • so that we always compile it eagerly • so that initial startup is faster
(Being included in the code cache increases both the footprint on the hard disk and takes longer to serialize and deserialize. let alone the memory…) - So only the toplevel code gets compiled - Functions contained is compiled until the function is actually called - Lazily compiling inner functions still requires a new parsing pass
handlers of Ignition’s bytecode • compiles Ignition instructions to the target architecture • performing instruction selection and machine register allocation
to get structural tracing information about the life of handle objects • monitoring the operation of the Node.js event loop • tracking asynchronous requests and handles through their complete lifecycle
to avoid Name Mangling • All v8 JavaScript value become napi_value • deprecate v8 exceptions, all NAPI returns napi_status • redesigned scope, now uses napi_open_handle_scope
runtime support for native modules • allow executing files within the enclosed package • allow reusing itself as an Node.js interpreter • add auto-update feature
resources. • FE usually won’t ship a lot of unused code • Node.js has big node_modules folder so cost of eagerly compiling all is still huge • But we have mmap; works good on a single file • IP (Intellectual Property) Protection
shipping only bytecode” https://github.com/nodejs/node/issues/11842 “ AST, IR, bytecode and friends - standards and inovation” https://github.com/nodejs/CTC/issues/104
node_modules • Put them inside a SquashFS (i.e. your.exe) • OS mmaps your.exe when executed • Enjoy low memory footprint and fast startup • No source code shipped