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 <yagiz@nizipli.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
This commit is contained in:
Joyee Cheung 2022-12-02 17:24:30 +01:00
parent 7f9e4faf0c
commit a996638e53
No known key found for this signature in database
GPG Key ID: 92B78A53C8303B8D
2 changed files with 9 additions and 1 deletions

View File

@ -805,6 +805,12 @@ parser.add_argument('--v8-enable-short-builtin-calls',
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 '

View File

@ -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.