forked from msgpack/msgpack-javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsync-vs-async.ts
52 lines (45 loc) · 1.52 KB
/
sync-vs-async.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
#!ts-node
/* eslint-disable no-console */
import { encode, decode, decodeAsync, decodeArrayStream } from "../src";
import { writeFileSync, unlinkSync, readFileSync, createReadStream } from "fs";
import { deepStrictEqual } from "assert";
(async () => {
const data = [];
for (let i = 0; i < 1000; i++) {
const id = i + 1;
data.push({
id,
score: Math.round(Math.random() * Number.MAX_SAFE_INTEGER),
title: `Hello, world! #${id}`,
content: `blah blah blah `.repeat(20).trim(),
createdAt: new Date(),
});
}
const encoded = encode(data);
const file = "benchmark/tmp.msgpack";
writeFileSync(file, encoded);
process.on("exit", () => unlinkSync(file));
console.log(`encoded size ${Math.round(encoded.byteLength / 1024)}KiB`);
deepStrictEqual(decode(readFileSync(file)), data);
deepStrictEqual(await decodeAsync(createReadStream(file)), data);
// sync
console.time("readFileSync |> decode");
for (let i = 0; i < 100; i++) {
decode(readFileSync(file));
}
console.timeEnd("readFileSync |> decode");
// async
console.time("creteReadStream |> decodeAsync");
for (let i = 0; i < 100; i++) {
await decodeAsync(createReadStream(file));
}
console.timeEnd("creteReadStream |> decodeAsync");
// asyncArrayStream
console.time("creteReadStream |> decodeArrayStream");
for (let i = 0; i < 100; i++) {
for await (let result of decodeArrayStream(createReadStream(file))) {
// console.log(result);
}
}
console.timeEnd("creteReadStream |> decodeArrayStream");
})();