From 93fcec595cda74991c1578f4138a21955e30ee2c Mon Sep 17 00:00:00 2001 From: Toni Dietze Date: Mon, 4 Oct 2021 20:02:45 +0200 Subject: [PATCH] cache also undefined values in option resolver (#9661) Otherwise, repeated lookups of undefined properties always trigger the comparatively expensive resolution. This can be the case for example in _calculateBarIndexPixels() in controller.bar.js when looking up options.skipNull and options.maxBarThickness, which is done for each bar in a bar chart. --- src/helpers/helpers.config.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/helpers/helpers.config.js b/src/helpers/helpers.config.js index ce78ec68f..f59ed31f6 100644 --- a/src/helpers/helpers.config.js +++ b/src/helpers/helpers.config.js @@ -181,17 +181,13 @@ const readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name; const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters'; function _cached(target, prop, resolve) { - let value = target[prop]; // cached value - if (defined(value)) { - return value; + if (Object.prototype.hasOwnProperty.call(target, prop)) { + return target[prop]; } - value = resolve(); - - if (defined(value)) { - // cache the resolved value - target[prop] = value; - } + const value = resolve(); + // cache the resolved value + target[prop] = value; return value; } -- 2.47.2