Skip to content

Commit 8dca355

Browse files
author
observ33r
committed
docs: update Usage and Benchmark sections in README
1 parent 968261e commit 8dca355

File tree

1 file changed

+59
-54
lines changed

1 file changed

+59
-54
lines changed

README.md

Lines changed: 59 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,21 @@ bun install jsoncmp
3838
```ts
3939
import jsoncmp from 'jsoncmp';
4040

41-
type JSONCmpValue =
41+
export type JSONCmpValue =
4242
| number
4343
| string
4444
| boolean
4545
| null
46-
| JSONCmpValue[]
47-
| {
48-
[key: string]:
49-
| JSONCmpValue
50-
| undefined //allowed only for TS structural compatibility in unions
51-
};
46+
| JSONCmpArray
47+
| JSONCmpObject;
48+
49+
export type JSONCmpArray = JSONCmpValue[];
50+
51+
export interface JSONCmpObject {
52+
[key: string]:
53+
| JSONCmpValue
54+
| undefined
55+
}
5256

5357
/**
5458
* Compares two JSON-compatible values for deep structural equality.
@@ -83,68 +87,69 @@ console.log(jsoncmp(target, source)); //true
8387

8488
| Library | Time | Relative Speed |
8589
| :--- | :--- | :--- |
86-
| jsoncmp | 348.80 µs | 1.00x (baseline) |
87-
| fast-equals | 1.39 ms | 3.99x slower |
88-
| dequal/lite | 1.54 ms | 4.42x slower |
89-
| node.isDeepStrictEqual | 2.52 ms | 7.23x slower |
90-
| JSON.stringify | 4.08 ms | 11.71x slower |
91-
| lodash.isEqual | 6.47 ms | 18.54x slower |
90+
| jsoncmp | 341.63 µs | 1.00x (baseline) |
91+
| fast-equals | 1.38 ms | 4.05x slower |
92+
| dequal/lite | 1.45 ms | 4.24x slower |
93+
| node.isDeepStrictEqual | 2.48 ms | 7.25x slower |
94+
| JSON.stringify | 3.84 ms | 11.24x slower |
95+
| lodash.isEqual | 6.24 ms | 18.27x slower |
96+
9297

9398
<details>
9499
<summary>Full benchmark result with hardware counters</summary>
95100

96101
```console
97-
clk: ~3.69 GHz
102+
clk: ~3.67 GHz
98103
cpu: AMD Ryzen 5 3600 6-Core Processor
99104
runtime: node 24.4.1 (x64-linux)
100105
101106
benchmark avg (min … max) p75 / p99 (min … top 1%)
102107
------------------------------------------- -------------------------------
103108
• Big JSON Object (~1.2 MiB, deeply nested)
104109
------------------------------------------- -------------------------------
105-
jsoncmp 348.80 µs/iter 344.88 µs █
106-
(332.46 µs … 558.35 µs) 534.88 µs █
107-
(403.01 kb … 1.20 mb) 967.86 kb ▄█▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
108-
3.11 ipc ( 87.45% cache) 3.20k branch misses
109-
1.42M cycles 4.43M instructions 93.73k c-refs 11.76k c-misses
110-
111-
fast-equals 1.39 ms/iter 1.38 ms
112-
(1.32 ms … 1.88 ms) 1.66 ms ▂ █
113-
(851.30 kb … 1.13 mb) 968.70 kb ▂█▆█▇▃▂▂▂▂▁▂▂▁▁▂▁▁▁▁
114-
2.70 ipc ( 87.48% cache) 13.06k branch misses
115-
5.32M cycles 14.35M instructions 130.36k c-refs 16.31k c-misses
116-
117-
dequal/lite 1.54 ms/iter 1.52 ms
118-
(1.51 ms … 2.18 ms) 2.02 ms ██
119-
(484.92 kb … 690.30 kb) 485.44 kb ██▂▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁
120-
2.48 ipc ( 91.62% cache) 11.82k branch misses
121-
5.91M cycles 14.64M instructions 134.45k c-refs 11.27k c-misses
122-
123-
lodash.isEqual 6.47 ms/iter 6.46 ms
124-
(6.30 ms … 8.03 ms) 7.42 ms █
125-
( 2.98 mb … 5.56 mb) 4.24 mb ▅██▂▁▆▄▁▂▁▁▁▁▁▁▁▁▁▁▁▁
126-
2.48 ipc ( 97.75% cache) 34.76k branch misses
127-
24.94M cycles 61.94M instructions 1.50M c-refs 33.67k c-misses
128-
129-
JSON.stringify 4.08 ms/iter 4.05 ms
130-
(3.90 ms … 9.64 ms) 4.99 ms
131-
( 1.39 mb … 1.40 mb) 1.39 mb ▂▇██▄▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁
132-
2.62 ipc ( 90.97% cache) 50.92k branch misses
133-
13.17M cycles 34.50M instructions 428.33k c-refs 38.70k c-misses
134-
135-
node.isDeepStrictEqual 2.52 ms/iter 2.51 ms █
136-
(2.45 ms … 3.40 ms) 3.08 ms █
137-
(941.22 kb … 1.96 mb) 1.36 mb ███▄▄▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁
138-
2.69 ipc ( 92.85% cache) 16.52k branch misses
139-
9.69M cycles 26.04M instructions 189.83k c-refs 13.58k c-misses
110+
jsoncmp 341.63 µs/iter 339.20 µs █
111+
(327.78 µs … 604.35 µs) 534.00 µs █
112+
(382.48 kb … 1.23 mb) 967.89 kb ██▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
113+
3.12 ipc ( 87.01% cache) 3.20k branch misses
114+
1.39M cycles 4.34M instructions 91.63k c-refs 11.90k c-misses
115+
116+
fast-equals 1.38 ms/iter 1.44 ms
117+
(1.26 ms … 1.83 ms) 1.74 ms ██▆ ▂▃
118+
(763.16 kb … 1.11 mb) 968.27 kb ███▅██▂▃▄▄▃▂▂▂▅▇▃▂▂▂
119+
2.69 ipc ( 87.40% cache) 13.65k branch misses
120+
5.33M cycles 14.30M instructions 130.47k c-refs 16.44k c-misses
121+
122+
dequal/lite 1.45 ms/iter 1.46 ms
123+
(1.41 ms … 1.80 ms) 1.68 ms █▂
124+
(204.09 kb … 486.02 kb) 484.41 kb ████▇▄▂▃▂▂▂▁▁▁▁▁▁▁▁▁
125+
2.62 ipc ( 88.67% cache) 12.31k branch misses
126+
5.58M cycles 14.60M instructions 108.22k c-refs 12.26k c-misses
127+
128+
lodash.isEqual 6.24 ms/iter 6.38 ms ▄█
129+
(5.90 ms … 7.82 ms) 6.95 ms █▇▇ ██▃
130+
( 3.08 mb … 5.50 mb) 4.23 mb ▅███▇▅▄▇███▆▄▂▄▁▁▁▁▁
131+
2.49 ipc ( 97.72% cache) 33.35k branch misses
132+
24.77M cycles 61.79M instructions 1.48M c-refs 33.85k c-misses
133+
134+
JSON.stringify 3.84 ms/iter 3.83 ms ██
135+
(3.56 ms … 8.55 ms) 5.48 ms ██
136+
( 1.39 mb … 1.40 mb) 1.39 mb ██▇█▄▃▄▄▂▁▂▁▁▁▁▁▁▁▁▁
137+
2.68 ipc ( 89.46% cache) 51.52k branch misses
138+
12.81M cycles 34.38M instructions 422.39k c-refs 44.54k c-misses
139+
140+
node.isDeepStrictEqual 2.48 ms/iter 2.47 ms █
141+
(2.42 ms … 3.47 ms) 2.96 ms █
142+
(376.59 kb … 1.80 mb) 1.36 mb ███▄▁▁▁▁▁▂▂▁▁▁▁▁▂▁▁▁▁
143+
2.73 ipc ( 92.25% cache) 16.40k branch misses
144+
9.55M cycles 26.06M instructions 187.67k c-refs 14.55k c-misses
140145
141146
summary
142147
jsoncmp
143-
3.99x faster than fast-equals
144-
4.42x faster than dequal/lite
145-
7.23x faster than node.isDeepStrictEqual
146-
11.71x faster than JSON.stringify
147-
18.54x faster than lodash.isEqual
148+
4.05x faster than fast-equals
149+
4.24x faster than dequal/lite
150+
7.25x faster than node.isDeepStrictEqual
151+
11.24x faster than JSON.stringify
152+
18.27x faster than lodash.isEqual
148153
```
149154

150155
</details>

0 commit comments

Comments
 (0)