From 03db415540e36aa2a93212ba38cb03b9e5a9be07 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Fri, 2 Dec 2022 17:24:30 +0100 Subject: [PATCH] build: disable v8 snapshot compression by default In the upstream, V8 also disables snapshot compression on the desktop by default because the size reduction is not worth the performance hit. https://chromium-review.googlesource.com/c/v8/v8/+/3275554 Locally the binary size of Node.js is increased by ~2.7MB (+3.2%) with a significant speedup in startup after snapshot compression is disabled on macOS. Also adds a --v8-enable-snapshot-compression to configure.py for users who prefer a size reduction over speedup in startup. Ideally we should implement our own compression for the source code + the code cache + the snapshot instead of relying on V8's builtin compression for just the snapshot. PR-URL: https://github.com/nodejs/node/pull/45716 Reviewed-By: Yagiz Nizipli Reviewed-By: Jiawen Geng Reviewed-By: Luigi Pinca Reviewed-By: Daeyeon Jeong --- configure.py | 8 ++++++++ tools/v8_gypfiles/features.gypi | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/configure.py b/configure.py index a6dae354d4233f..1c01c6fdb2060c 100755 --- a/configure.py +++ b/configure.py @@ -805,6 +805,12 @@ help='Enable V8 short builtin calls support. This feature is enabled '+ 'on x86_64 platform by default.') +parser.add_argument('--v8-enable-snapshot-compression', + action='store_true', + dest='v8_enable_snapshot_compression', + default=None, + help='Enable the built-in snapshot compression in V8.') + parser.add_argument('--node-builtin-modules-path', action='store', dest='node_builtin_modules_path', @@ -1482,6 +1488,8 @@ def configure_v8(o): o['variables']['v8_enable_hugepage'] = 1 if options.v8_enable_hugepage else 0 if options.v8_enable_short_builtin_calls or o['variables']['target_arch'] == 'x64': o['variables']['v8_enable_short_builtin_calls'] = 1 + if options.v8_enable_snapshot_compression: + o['variables']['v8_enable_snapshot_compression'] = 1 if options.v8_enable_object_print and options.v8_disable_object_print: raise Exception( 'Only one of the --v8-enable-object-print or --v8-disable-object-print options ' diff --git a/tools/v8_gypfiles/features.gypi b/tools/v8_gypfiles/features.gypi index 2c70ce216c98a0..3c383fd32f3b7f 100644 --- a/tools/v8_gypfiles/features.gypi +++ b/tools/v8_gypfiles/features.gypi @@ -216,7 +216,7 @@ 'v8_enable_regexp_interpreter_threaded_dispatch%': 1, # Disable all snapshot compression. - 'v8_enable_snapshot_compression%': 1, + 'v8_enable_snapshot_compression%': 0, # Enable control-flow integrity features, such as pointer authentication # for ARM64.