Skip to content

Commit

Permalink
Reduce object creation during parsing (#6758)
Browse files Browse the repository at this point in the history
* Reduce object creation during parsing
* Rename method to createElement
* Make code more efficient?
* Update migration guide
  • Loading branch information
benmccann authored and etimberg committed Nov 17, 2019
1 parent 4b4b4b7 commit f5b2b8d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 33 deletions.
14 changes: 8 additions & 6 deletions docs/getting-started/v3-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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`
Expand Down
6 changes: 3 additions & 3 deletions src/controllers/controller.doughnut.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];
}
},

Expand Down Expand Up @@ -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 || {};
Expand Down Expand Up @@ -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);
}
Expand Down
38 changes: 14 additions & 24 deletions src/core/core.datasetController.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
});
},

Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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);
},

/**
Expand Down

0 comments on commit f5b2b8d

Please sign in to comment.