diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2019-11-30 11:04:34 +0100 |
---|---|---|
committer | Beth Griggs <Bethany.Griggs@uk.ibm.com> | 2020-02-06 02:49:38 +0000 |
commit | 963c14c05c12e2610e9a68d1b94bccd47517e055 (patch) | |
tree | f60df2123c8e4bbf9dae96fa4c9bad7aff6bd617 | |
parent | 73e3c15a70a826538602ee86a08cb881f55ed952 (diff) | |
download | node-new-963c14c05c12e2610e9a68d1b94bccd47517e055.tar.gz |
util: improve performance inspecting proxies
This makes sure we do not retrieve the handler in case it's not
required. This improves the performance a tiny bit for these cases.
Backport-PR-URL: https://github.com/nodejs/node/pull/31431
PR-URL: https://github.com/nodejs/node/pull/30767
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
-rw-r--r-- | benchmark/util/inspect-proxy.js | 2 | ||||
-rw-r--r-- | lib/internal/util/inspect.js | 4 | ||||
-rw-r--r-- | src/node_util.cc | 20 | ||||
-rw-r--r-- | test/parallel/test-util-inspect-proxy.js | 7 |
4 files changed, 22 insertions, 11 deletions
diff --git a/benchmark/util/inspect-proxy.js b/benchmark/util/inspect-proxy.js index fd89d568ab..02379cdc77 100644 --- a/benchmark/util/inspect-proxy.js +++ b/benchmark/util/inspect-proxy.js @@ -4,7 +4,7 @@ const util = require('util'); const common = require('../common.js'); const bench = common.createBenchmark(main, { - n: [2e4], + n: [1e5], showProxy: [0, 1], isProxy: [0, 1] }); diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index da6f9426ec..09f755ac00 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -640,12 +640,12 @@ function formatValue(ctx, value, recurseTimes, typedArray) { const context = value; // Always check for proxies to prevent side effects and to prevent triggering // any proxy handlers. - const proxy = getProxyDetails(value); + const proxy = getProxyDetails(value, !!ctx.showProxy); if (proxy !== undefined) { if (ctx.showProxy) { return formatProxy(ctx, proxy, recurseTimes); } - value = proxy[0]; + value = proxy; } // Provide a hook for user-specified inspect functions. diff --git a/src/node_util.cc b/src/node_util.cc index 4d0b109371..b9553eaaa6 100644 --- a/src/node_util.cc +++ b/src/node_util.cc @@ -91,15 +91,23 @@ static void GetProxyDetails(const FunctionCallbackInfo<Value>& args) { if (!args[0]->IsProxy()) return; + CHECK(args[1]->IsBoolean()); + Local<Proxy> proxy = args[0].As<Proxy>(); - Local<Value> ret[] = { - proxy->GetTarget(), - proxy->GetHandler() - }; + if (args[1]->IsTrue()) { + Local<Value> ret[] = { + proxy->GetTarget(), + proxy->GetHandler() + }; - args.GetReturnValue().Set( - Array::New(args.GetIsolate(), ret, arraysize(ret))); + args.GetReturnValue().Set( + Array::New(args.GetIsolate(), ret, arraysize(ret))); + } else { + Local<Value> ret = proxy->GetTarget(); + + args.GetReturnValue().Set(ret); + } } static void PreviewEntries(const FunctionCallbackInfo<Value>& args) { diff --git a/test/parallel/test-util-inspect-proxy.js b/test/parallel/test-util-inspect-proxy.js index c20af7450a..5e85b92f71 100644 --- a/test/parallel/test-util-inspect-proxy.js +++ b/test/parallel/test-util-inspect-proxy.js @@ -43,10 +43,13 @@ util.inspect(proxyObj, opts); // getProxyDetails is an internal method, not intended for public use. // This is here to test that the internals are working correctly. -const details = processUtil.getProxyDetails(proxyObj); +let details = processUtil.getProxyDetails(proxyObj, true); assert.strictEqual(target, details[0]); assert.strictEqual(handler, details[1]); +details = processUtil.getProxyDetails(proxyObj, false); +assert.strictEqual(target, details); + assert.strictEqual( util.inspect(proxyObj, opts), 'Proxy [\n' + @@ -105,7 +108,7 @@ const expected6 = 'Proxy [\n' + ' ]\n' + ']'; assert.strictEqual( - util.inspect(proxy1, { showProxy: true, depth: null }), + util.inspect(proxy1, { showProxy: 1, depth: null }), expected1); assert.strictEqual(util.inspect(proxy2, opts), expected2); assert.strictEqual(util.inspect(proxy3, opts), expected3); |