From 44d6861121168920421cd90810ac724cd7913727 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Fri, 12 Feb 2021 10:43:28 +0200 Subject: [PATCH 1/2] perf: context construction --- src/core/core.controller.js | 9 +--- src/core/core.datasetController.js | 66 ++++++++++-------------------- 2 files changed, 22 insertions(+), 53 deletions(-) diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 04ec4c191c5..fce289cf0c5 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -737,14 +737,7 @@ class Chart { } getContext() { - return this.$context || (this.$context = Object.create(null, { - chart: { - value: this - }, - type: { - value: 'chart' - } - })); + return this.$context || (this.$context = {chart: this, type: 'chart'}); } getVisibleDatasetCount() { diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index b5f50fd091c..5fe73c2df09 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -149,55 +149,31 @@ function getFirstScaleId(chart, axis) { } function createDatasetContext(parent, index, dataset) { - return Object.create(parent, { - active: { - writable: true, - value: false - }, - dataset: { - value: dataset - }, - datasetIndex: { - value: index - }, - index: { - get() { - return this.datasetIndex; - } + return Object.setPrototypeOf( + { + active: false, + dataset, + datasetIndex: index, + index, + type: 'dataset' }, - type: { - value: 'dataset' - } - }); + parent + ); } function createDataContext(parent, index, point, raw, element) { - return Object.create(parent, { - active: { - writable: true, - value: false - }, - dataIndex: { - value: index - }, - parsed: { - value: point - }, - raw: { - value: raw - }, - element: { - value: element - }, - index: { - get() { - return this.dataIndex; - } - }, - type: { - value: 'data', - } - }); + const context = { + active: false, + dataIndex: index, + parsed: point, + raw, + element, + index, + mode: 'default', + type: 'data' + }; + Object.setPrototypeOf(context, parent); + return context; } function clearStacks(meta, items) { From 753f4b6592dad33ddfa419bb69014ebd21dca493 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Fri, 12 Feb 2021 15:32:35 +0200 Subject: [PATCH 2/2] avoid setPrototypeOf --- src/core/core.datasetController.js | 11 ++++------- src/core/core.scale.js | 24 +++++++----------------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 5fe73c2df09..a06946b1f02 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -149,20 +149,19 @@ function getFirstScaleId(chart, axis) { } function createDatasetContext(parent, index, dataset) { - return Object.setPrototypeOf( + return Object.assign(Object.create(parent), { active: false, dataset, datasetIndex: index, index, type: 'dataset' - }, - parent + } ); } function createDataContext(parent, index, point, raw, element) { - const context = { + return Object.assign(Object.create(parent), { active: false, dataIndex: index, parsed: point, @@ -171,9 +170,7 @@ function createDataContext(parent, index, point, raw, element) { index, mode: 'default', type: 'data' - }; - Object.setPrototypeOf(context, parent); - return context; + }); } function clearStacks(meta, items) { diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 70fdfaca695..00eff1fd292 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -282,27 +282,17 @@ function skip(ticks, newTicks, spacing, majorStart, majorEnd) { } function createScaleContext(parent, scale) { - return Object.create(parent, { - scale: { - value: scale - }, - type: { - value: 'scale' - } + return Object.assign(Object.create(parent), { + scale, + type: 'scale' }); } function createTickContext(parent, index, tick) { - return Object.create(parent, { - tick: { - value: tick - }, - index: { - value: index - }, - type: { - value: 'tick' - } + return Object.assign(Object.create(parent), { + tick, + index, + type: 'tick' }); }