1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
import { group, benchmark, setup, teardown } from './lib/minibench/minibench.js';
import { BlazorApp } from './util/BlazorApp.js';
import { receiveEvent } from './util/BenchmarkEvents.js';
import { setInputValue } from './util/DOM.js';
import { largeJsonToDeserialize, largeObjectToSerialize } from './jsonHandlingData.js';
group('JSON handling', () => {
let app;
setup(async () => {
app = new BlazorApp();
await app.start();
app.navigateTo('json');
});
teardown(() => app.dispose());
benchmark('Serialize 1kb', () =>
benchmarkJson(app, '#serialize-small', '#serialized-length', 935));
benchmark('Serialize 340kb', () =>
benchmarkJson(app, '#serialize-large', '#serialized-length', 339803));
benchmark('Deserialize 1kb', () =>
benchmarkJson(app, '#deserialize-small', '#deserialized-count', 5));
benchmark('Deserialize 340kb', () =>
benchmarkJson(app, '#deserialize-large', '#deserialized-count', 1365));
benchmark('Serialize 340kb (JavaScript)', () => {
const json = JSON.stringify(largeObjectToSerialize);
if (json.length !== 339803) {
throw new Error(`Incorrect length: ${json.length}`);
}
});
benchmark('Deserialize 340kb (JavaScript)', () => {
const parsed = JSON.parse(largeJsonToDeserialize);
if (parsed.name !== 'CEO - Subordinate 0') {
throw new Error('Incorrect result');
}
});
});
async function benchmarkJson(app, buttonSelector, resultSelector, expectedResult) {
const appDocument = app.window.document;
appDocument.querySelector('#reset-all').click();
let nextRenderCompletion = receiveEvent('Finished JSON processing');
appDocument.querySelector(buttonSelector).click();
await nextRenderCompletion;
const resultElem = appDocument.querySelector(resultSelector);
if (resultElem.textContent != expectedResult.toString()) {
throw new Error(`Incorrect result: ${resultElem.textContent}`);
}
}
|