]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Reduce object creation during parsing (#6758)
authorBen McCann <322311+benmccann@users.noreply.github.com>
Sun, 17 Nov 2019 23:01:31 +0000 (15:01 -0800)
committerEvert Timberg <evert.timberg+github@gmail.com>
Sun, 17 Nov 2019 23:01:31 +0000 (18:01 -0500)
* Reduce object creation during parsing
* Rename method to createElement
* Make code more efficient?
* Update migration guide

docs/getting-started/v3-migration.md
src/controllers/controller.doughnut.js
src/core/core.datasetController.js

index d247f60c80daa5c7c42c44f521ac3bf927dc58f7..e7d395d87b28aa7d9f3a36f2fa48ca9741c1f379 100644 (file)
@@ -65,18 +65,19 @@ Chart.js 3.0 introduces a number of breaking changes. Chart.js 2.0 was released
 * `helpers.removeEvent`
 * `helpers.roundedRect`
 * `helpers.scaleMerge`
-* `Scale.getRightValue`
-* `Scale.mergeTicksOptions`
-* `Scale.ticksAsNumbers`
 * `Chart.Controller`
 * `Chart.chart.chart`
 * `Chart.types`
-* `Line.calculatePointY`
+* `DatasetController.addElementAndReset`
 * `Element.getArea`
 * `Element.height`
 * `Element.inLabelRange`
-* Made `scale.handleDirectionalChanges` private
-* Made `scale.tickValues` private
+* `Line.calculatePointY`
+* `Scale.getRightValue`
+* `Scale.mergeTicksOptions`
+* `Scale.ticksAsNumbers`
+* `Scale.handleDirectionalChanges` is now private
+* `Scale.tickValues` is now private
 
 #### Removal of private APIs
 
@@ -95,6 +96,7 @@ Chart.js 3.0 introduces a number of breaking changes. Chart.js 2.0 was released
 * `helpers.log10` was renamed to `helpers.math.log10`
 * `Chart.Animation.animationObject` was renamed to `Chart.Animation`
 * `Chart.Animation.chartInstance` was renamed to `Chart.Animation.chart`
+* `DatasetController.createMetaData` and `DatasetController.createMetaDataset` were replaced with `DatasetController.createElement`
 * `TimeScale.getLabelCapacity` was renamed to `TimeScale._getLabelCapacity`
 * `TimeScale.tickFormatFunction` was renamed to `TimeScale._tickFormatFunction`
 * `TimeScale.getPixelForOffset` was renamed to `TimeScale._getPixelForOffset`
index 8fefa623fa118758ce0c9bc13782b231fa561851..e3bf0aa231508a08c7639828398e974a7f68b62a 100644 (file)
@@ -143,7 +143,7 @@ module.exports = DatasetController.extend({
                var metaData = this.getMeta().data;
                var i, ilen;
                for (i = start, ilen = start + count; i < ilen; ++i) {
-                       metaData[i]._val = +data[i];
+                       metaData[i]._parsed = +data[i];
                }
        },
 
@@ -232,7 +232,7 @@ module.exports = DatasetController.extend({
                var centerY = (chartArea.top + chartArea.bottom) / 2;
                var startAngle = opts.rotation; // non reset case handled later
                var endAngle = opts.rotation; // non reset case handled later
-               var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(arc._val * opts.circumference / DOUBLE_PI);
+               var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(arc._parsed * opts.circumference / DOUBLE_PI);
                var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;
                var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;
                var options = arc._options || {};
@@ -276,7 +276,7 @@ module.exports = DatasetController.extend({
                var value;
 
                helpers.each(metaData, function(arc) {
-                       value = arc ? arc._val : NaN;
+                       value = arc ? arc._parsed : NaN;
                        if (!isNaN(value) && !arc.hidden) {
                                total += Math.abs(value);
                        }
index a5ea94035e77d506b534e1e1cb9824307d3279b8..213c1a553c3aae7d4305fe75ea3ad3729796ff0c 100644 (file)
@@ -327,20 +327,9 @@ helpers.extend(DatasetController.prototype, {
                }
        },
 
-       createMetaDataset: function() {
-               var me = this;
-               var type = me.datasetElementType;
-               return type && new type({
-                       _ctx: me.chart.ctx
-               });
-       },
-
-       createMetaData: function() {
-               var me = this;
-               var type = me.dataElementType;
+       createElement: function(type) {
                return type && new type({
-                       _ctx: me.chart.ctx,
-                       _parsed: {}
+                       _ctx: this.chart.ctx
                });
        },
 
@@ -411,16 +400,10 @@ helpers.extend(DatasetController.prototype, {
                data = me._data;
 
                for (i = 0, ilen = data.length; i < ilen; ++i) {
-                       metaData[i] = metaData[i] || me.createMetaData();
+                       metaData[i] = metaData[i] || me.createElement(me.dataElementType);
                }
 
-               meta.dataset = meta.dataset || me.createMetaDataset();
-       },
-
-       addElementAndReset: function(index) {
-               var element = this.createMetaData();
-               this._cachedMeta.data.splice(index, 0, element);
-               this.updateElement(element, index, true);
+               meta.dataset = meta.dataset || me.createElement(me.datasetElementType);
        },
 
        buildOrUpdateElements: function() {
@@ -973,10 +956,17 @@ helpers.extend(DatasetController.prototype, {
         * @private
         */
        insertElements: function(start, count) {
-               for (var i = 0; i < count; ++i) {
-                       this.addElementAndReset(start + i);
+               const me = this;
+               const elements = [];
+               var i;
+               for (i = start; i < start + count; ++i) {
+                       elements.push(me.createElement(me.dataElementType));
+               }
+               me._cachedMeta.data.splice(start, 0, ...elements);
+               me._parse(start, count);
+               for (i = 0; i < count; ++i) {
+                       me.updateElement(elements[i], start + i, true);
                }
-               this._parse(start, count);
        },
 
        /**