util: fix inspect performance bug
In case an object contained a circular reference `Object.keys` was called even though it was not necessary at all. This caused a significant overhead for objects that contained a lot of such entries. PR-URL: https://github.com/nodejs/node/pull/20007 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
This commit is contained in:
parent
5c425788f1
commit
f413f56c36
10
lib/util.js
10
lib/util.js
@ -456,6 +456,11 @@ function formatValue(ctx, value, recurseTimes, ln) {
|
||||
}
|
||||
}
|
||||
|
||||
// Using an array here is actually better for the average case than using
|
||||
// a Set. `seen` will only check for the depth and will never grow too large.
|
||||
if (ctx.seen.indexOf(value) !== -1)
|
||||
return ctx.stylize('[Circular]', 'special');
|
||||
|
||||
let keys;
|
||||
let symbols = Object.getOwnPropertySymbols(value);
|
||||
|
||||
@ -640,11 +645,6 @@ function formatValue(ctx, value, recurseTimes, ln) {
|
||||
}
|
||||
}
|
||||
|
||||
// Using an array here is actually better for the average case than using
|
||||
// a Set. `seen` will only check for the depth and will never grow too large.
|
||||
if (ctx.seen.indexOf(value) !== -1)
|
||||
return ctx.stylize('[Circular]', 'special');
|
||||
|
||||
if (recurseTimes != null) {
|
||||
if (recurseTimes < 0)
|
||||
return ctx.stylize(`[${constructor || tag || 'Object'}]`, 'special');
|
||||
|
Loading…
x
Reference in New Issue
Block a user