mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
Reduce object creation during parsing (#6758)
* Reduce object creation during parsing * Rename method to createElement * Make code more efficient? * Update migration guide
This commit is contained in:
parent
4b4b4b79e1
commit
f5b2b8db64
@ -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`
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -327,20 +327,9 @@ helpers.extend(DatasetController.prototype, {
|
||||
}
|
||||
},
|
||||
|
||||
createMetaDataset: function() {
|
||||
var me = this;
|
||||
var type = me.datasetElementType;
|
||||
createElement: function(type) {
|
||||
return type && new type({
|
||||
_ctx: me.chart.ctx
|
||||
});
|
||||
},
|
||||
|
||||
createMetaData: function() {
|
||||
var me = this;
|
||||
var type = me.dataElementType;
|
||||
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);
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user