-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.mjs
70 lines (55 loc) · 1.56 KB
/
index.mjs
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
/* eslint-disable no-constant-binary-expression */
import { performance } from "node:perf_hooks";
import classnames from "classnames";
import { clsx } from "clsx";
import { cx } from "classix";
import { cx as cxLocal } from "../dist/esm/classix.mjs";
const NB_RUN = 100_000_000;
function logResult(name, ms) {
const millionsOfOpsPerSecond = ((NB_RUN * 1000) / ms / 1_000_000).toFixed(1);
console.log(`${name}: ${millionsOfOpsPerSecond}M ops/s`);
}
// Repetition of code was used as to not affect performance
let start = 0;
let stop = 0;
start = performance.now();
for (let i = 0; i < NB_RUN; i++) {
classnames("class-1", { "class-2": true });
}
stop = performance.now();
logResult("classnames (object)", stop - start);
//
start = performance.now();
for (let i = 0; i < NB_RUN; i++) {
classnames("class-1", true && "class-2");
}
stop = performance.now();
logResult("classnames", stop - start);
//
start = performance.now();
for (let i = 0; i < NB_RUN; i++) {
clsx("class-1", { "class-2": true });
}
stop = performance.now();
logResult("clsx (object)", stop - start);
//
start = performance.now();
for (let i = 0; i < NB_RUN; i++) {
clsx("class-1", true && "class-2");
}
stop = performance.now();
logResult("clsx", stop - start);
//
start = performance.now();
for (let i = 0; i < NB_RUN; i++) {
cx("class-1", true && "class-2");
}
stop = performance.now();
logResult("classix", stop - start);
//
start = performance.now();
for (let i = 0; i < NB_RUN; i++) {
cxLocal("class-1", true && "class-2");
}
stop = performance.now();
logResult("classix (local)", stop - start);