From 5f19b8f10396f16565617fa2ee7c4d43c4987094 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Fri, 15 Mar 2019 14:18:29 -0400 Subject: [PATCH] lib: lazy load `v8` in error-serdes Lazy loading `v8` in `lib/internal/error-serdes.js` reduces the number of loaded modules by the bootstrap code for Worker threads by seven. Refs: https://github.com/nodejs/node/pull/26501#discussion_r264849750 --- lib/internal/error-serdes.js | 5 ++++- test/parallel/test-bootstrap-modules.js | 7 ------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/internal/error-serdes.js b/lib/internal/error-serdes.js index 1fed04f0a9864f..895133bc8f79cf 100644 --- a/lib/internal/error-serdes.js +++ b/lib/internal/error-serdes.js @@ -1,7 +1,6 @@ 'use strict'; const Buffer = require('buffer').Buffer; -const { serialize, deserialize } = require('v8'); const { SafeSet, Object, @@ -84,7 +83,9 @@ function lazyUtil() { return util; } +let serialize; function serializeError(error) { + if (!serialize) serialize = require('v8').serialize; try { if (typeof error === 'object' && ObjectPrototypeToString(error) === '[object Error]') { @@ -109,7 +110,9 @@ function serializeError(error) { Buffer.from(lazyUtil().inspect(error), 'utf8')]); } +let deserialize; function deserializeError(error) { + if (!deserialize) deserialize = require('v8').deserialize; switch (error[0]) { case kSerializedError: const { constructor, properties } = deserialize(error.subarray(1)); diff --git a/test/parallel/test-bootstrap-modules.js b/test/parallel/test-bootstrap-modules.js index e65098b92295bc..4693072b8159ad 100644 --- a/test/parallel/test-bootstrap-modules.js +++ b/test/parallel/test-bootstrap-modules.js @@ -71,13 +71,8 @@ if (common.isMainThread) { expectedModules.add('NativeModule internal/process/main_thread_only'); expectedModules.add('NativeModule internal/process/stdio'); } else { - expectedModules.add('Internal Binding heap_utils'); expectedModules.add('Internal Binding messaging'); - expectedModules.add('Internal Binding serdes'); - expectedModules.add('Internal Binding stream_wrap'); expectedModules.add('Internal Binding symbols'); - expectedModules.add('Internal Binding uv'); - expectedModules.add('Internal Binding v8'); expectedModules.add('Internal Binding worker'); expectedModules.add('NativeModule _stream_duplex'); expectedModules.add('NativeModule _stream_passthrough'); @@ -86,7 +81,6 @@ if (common.isMainThread) { expectedModules.add('NativeModule _stream_writable'); expectedModules.add('NativeModule internal/error-serdes'); expectedModules.add('NativeModule internal/process/worker_thread_only'); - expectedModules.add('NativeModule internal/stream_base_commons'); expectedModules.add('NativeModule internal/streams/buffer_list'); expectedModules.add('NativeModule internal/streams/destroy'); expectedModules.add('NativeModule internal/streams/end-of-stream'); @@ -97,7 +91,6 @@ if (common.isMainThread) { expectedModules.add('NativeModule internal/worker/io'); expectedModules.add('NativeModule module'); expectedModules.add('NativeModule stream'); - expectedModules.add('NativeModule v8'); expectedModules.add('NativeModule worker_threads'); }