-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
main.ts
96 lines (76 loc) · 2.23 KB
/
main.ts
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import native from "./native.ts";
import wasm from "./wasm.ts";
import { Backend } from "./backend.ts";
let level = 0;
function log(type: string, msg: string): void {
console.log(`${" ".repeat(level)}%c${type} %c${msg}`, "color: #0DBC79", "");
}
const ROWS = 10;
const ITERS = 10;
const backends: Backend[] = [native, wasm];
for (const backend of backends) {
log("Bench", backend.name);
level++;
backend.execute("pragma journal_mode = WAL", []);
backend.execute("pragma synchronous = normal", []);
backend.execute("pragma temp_store = memory", []);
backend.execute(
"create table test (key integer primary key autoincrement, value text not null)",
[],
);
log("Insert", "Bench start ->");
level++;
let total = 0;
let min!: number, max!: number;
for (let iter = 0; iter < ITERS; iter++) {
const now = performance.now();
const prep = backend.prepare("insert into test (value) values (?)");
for (let i = 0; i < ROWS; i++) {
prep.execute([`iter ${iter} loop ${i}`]);
}
prep.finalize();
const took = performance.now() - now;
if (min === undefined || max === undefined) {
min = max = took;
} else {
min = Math.min(min, took);
max = Math.max(max, took);
}
total += took;
}
log(
"Result",
`${ITERS} iter ${ROWS} rows took ${total.toFixed(2)}ms ${
(ITERS / (total / 1000)).toFixed(2)
} iter/sec min ${min.toFixed(2)}ms max ${max.toFixed(2)}ms ±${
Math.abs(max - min).toFixed(2)
}ms`,
);
level--;
log("Query", "Bench start ->");
level++;
total = 0, min = undefined as any, max = undefined as any;
for (let iter = 0; iter < ITERS; iter++) {
const now = performance.now();
backend.query("select * from test");
const took = performance.now() - now;
if (min === undefined || max === undefined) {
min = max = took;
} else {
min = Math.min(min, took);
max = Math.max(max, took);
}
total += took;
}
log(
"Result",
`${ITERS} iter ${ROWS} rows took ${total.toFixed(2)}ms ${
(ITERS / (total / 1000)).toFixed(2)
} iter/sec min ${min.toFixed(2)}ms max ${max.toFixed(2)}ms ±${
Math.abs(max - min).toFixed(2)
}ms`,
);
level--;
level--;
backend.close();
}