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 keys;
|
||||||
let symbols = Object.getOwnPropertySymbols(value);
|
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 != null) {
|
||||||
if (recurseTimes < 0)
|
if (recurseTimes < 0)
|
||||||
return ctx.stylize(`[${constructor || tag || 'Object'}]`, 'special');
|
return ctx.stylize(`[${constructor || tag || 'Object'}]`, 'special');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user