Skip to content

Commit bf71b11

Browse files
committed
Fix element creation for large dataset
1 parent eb7ce4e commit bf71b11

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

src/core/core.datasetController.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -990,19 +990,14 @@ export default class DatasetController {
990990
*/
991991
_insertElements(start, count, resetNewElements = true) {
992992
const me = this;
993-
const elements = new Array(count);
994993
const meta = me._cachedMeta;
995994
const data = meta.data;
996995
let i;
997996

998-
for (i = 0; i < count; ++i) {
999-
elements[i] = new me.dataElementType();
997+
for (i = start; i < start + count; ++i) {
998+
data[i] = new me.dataElementType();
1000999
}
1001-
data.splice(start, 0, ...elements);
10021000

1003-
if (me._parsing) {
1004-
meta._parsed.splice(start, 0, ...new Array(count));
1005-
}
10061001
me.parse(start, count);
10071002

10081003
if (resetNewElements) {

test/specs/controller.line.tests.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,4 +907,30 @@ describe('Chart.controllers.line', function() {
907907
expect(meta.data[2].options.borderWidth).toBe(3);
908908
expect(meta.data[3].options.borderWidth).toBe(4);
909909
});
910+
911+
it('should render a million points', function() {
912+
var data = [];
913+
for (let x = 0; x < 1e6; x++) {
914+
data.push({x, y: Math.sin(x / 10000)});
915+
}
916+
function createChart() {
917+
window.acquireChart({
918+
type: 'line',
919+
data: {
920+
datasets: [{
921+
data,
922+
borderWidth: 1,
923+
radius: 0
924+
}],
925+
},
926+
options: {
927+
scales: {
928+
x: {type: 'linear'},
929+
y: {type: 'linear'}
930+
}
931+
}
932+
});
933+
}
934+
expect(createChart).not.toThrow();
935+
});
910936
});

0 commit comments

Comments
 (0)