Skip to content

Commit

Permalink
build: disable v8 snapshot compression by default
Browse files Browse the repository at this point in the history
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: #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>
  • Loading branch information
joyeecheung authored and danielleadams committed Dec 29, 2022
1 parent 4d3a726 commit 430d8b2
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
8 changes: 8 additions & 0 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,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',
Expand Down Expand Up @@ -1535,6 +1541,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 '
Expand Down
2 changes: 1 addition & 1 deletion tools/v8_gypfiles/features.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,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.
Expand Down

0 comments on commit 430d8b2

Please sign in to comment.