<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/ag-grid/dist/ag-grid.min.js"></script>
</head>
<body>
<h3>JSON vs ArrayBuffer: In-Memory Model</h3>
<button onclick="removeRows()">Clear</button>
<button onclick="buildJson()">ShowJSON</button>
<button onclick="showBinary()">ShowBinary</button>
<div id="message"></div>
<br/>
<br/>
<div id="myGrid" style="height: 600px;width:700px;" class="ag-theme-fresh"></div>
<script>
let N = 100000; // Number of Rows
let C = 6;// Number of Columns
let buffer = new ArrayBuffer(N * 4 * C);
let int32View = new Int32Array(buffer);
for (let i = 0; i < int32View.length; i++) {
int32View[i] = i;
}
let jsonRows = [];
for (let i = 0; i < N; ++i) {
let row = [];
for (let j = 0; j < C; ++j)
row.push(i * C + j);
jsonRows.push(row);
}
let jsonStr = JSON.stringify(jsonRows);
let columnDefs = [];
for (let c = 0; c < C; ++c) {
columnDefs.push({ headerName: "Col " + c, width: 110 });
}
let gridOptions = {
columnDefs: columnDefs,
rowData: []
};
function removeRows() {
gridOptions.api.setRowData([]);
document.getElementById("message").innerHTML = "";
}
function buildJson() {
for (let c = 0; c < C; ++c) {
gridOptions.columnDefs[c].valueGetter = function getter(params) {
return params.data[c];
};
}
gridOptions.api.setColumnDefs(gridOptions.columnDefs);
gridOptions.getRowNodeId = function (data) {
return data[0];
};
var t0 = performance.now();
let rows = JSON.parse(jsonStr);
var t00 = performance.now();
gridOptions.api.setRowData(rows);
var t1 = performance.now();
document.getElementById("message").innerHTML = "JSON parse time(ms)= " + (t00 - t0) + " total time(ms)=" + (t1 - t0);
}
function showBinary() {
gridOptions.api.setRowData([]);
for (let c = 0; c < C; ++c) {
gridOptions.columnDefs[c].valueGetter = function getter(params) {
return int32View[params.data + c];
};
}
gridOptions.api.setColumnDefs(gridOptions.columnDefs);
gridOptions.getRowNodeId = function (data) {
return int32View[data];
};
var t0 = performance.now();
let rowStart = [];
for (let i = 0; i < int32View.length; i = i + C) {
rowStart.push(i);
}
gridOptions.api.updateRowData({ add: rowStart });
var t1 = performance.now();
document.getElementById("message").innerHTML = "Raw total time(ms)=" + (t1 - t0);
}
let eGridDiv = document.querySelector('#myGrid');
new agGrid.Grid(eGridDiv, gridOptions);
</script>
</body>
</html>