diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2019-11-30 11:04:34 +0100 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2019-12-07 00:38:28 +0100 |
commit | c430aebe8683699fc072cb87e5be03af370a3f2f (patch) | |
tree | 3f93ee11527492d5295853b93c0252a4afafa423 | |
parent | bdb1083ef54cf99c959c554b741e62943b56e2af (diff) | |
download | android-node-v8-c430aebe8683699fc072cb87e5be03af370a3f2f.tar.gz android-node-v8-c430aebe8683699fc072cb87e5be03af370a3f2f.tar.bz2 android-node-v8-c430aebe8683699fc072cb87e5be03af370a3f2f.zip |
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.
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 7005911621..4e6f967c6a 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -643,12 +643,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 9c24985a47..07a7b69dbd 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 da0512eda1..c684026b19 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); |