@@ -14,88 +14,138 @@ Numbers below come from `cargo bench` runs on GitHub Actions hardware. Criterion
1414
1515` AVX2 ` enabled.
1616
17+ ** Short string payload (~ 89M iterations)**
18+
19+ | Implementation | Median time | vs fastest |
20+ | --------------------- | ------------ | ---------- |
21+ | ** ` escape simd ` ** | ** 56.23 ns** | ** 1.00×** |
22+ | ` escape generic ` | 111.58 ns | 1.98× |
23+ | ` serde_json ` | 111.65 ns | 1.99× |
24+ | ` json-escape ` | 140.01 ns | 2.49× |
25+ | ` escape v_jsonescape ` | 151.98 ns | 2.70× |
26+ | ` escape sonic ` | 202.21 ns | 3.60× |
27+
1728** RxJS payload (~ 10k iterations)**
1829
1930| Implementation | Median time | vs fastest |
2031| --------------------- | ------------- | ---------- |
21- | ** ` escape simd ` ** | ** 341.18 µs** | ** 1.00×** |
22- | ` escape v_jsonescape ` | 555.47 µs | 1.63× |
23- | ` escape generic ` | 656.85 µs | 1.93× |
24- | ` serde_json ` | 744.75 µs | 2.18× |
25- | ` json-escape ` | 777.15 µs | 2.28× |
32+ | ** ` escape simd ` ** | ** 246.84 µs** | ** 1.00×** |
33+ | ` escape sonic ` | 261.87 µs | 1.06× |
34+ | ` escape v_jsonescape ` | 531.77 µs | 2.15× |
35+ | ` json-escape ` | 561.93 µs | 2.28× |
36+ | ` escape generic ` | 664.00 µs | 2.69× |
37+ | ` serde_json ` | 649.19 µs | 2.63× |
2638
2739** Fixtures payload (~ 300 iterations)**
2840
29- | Implementation | Median time | vs fastest |
30- | --------------------- | ------------ | ---------- |
31- | ** ` escape simd ` ** | ** 12.67 ms** | ** 1.00×** |
32- | ` escape v_jsonescape ` | 20.58 ms | 1.62× |
33- | ` escape generic ` | 22.57 ms | 1.78× |
34- | ` serde_json ` | 24.52 ms | 1.94× |
35- | ` json-escape ` | 26.97 ms | 2.13× |
41+ | Implementation | Median time | vs fastest |
42+ | --------------------- | ------------- | ---------- |
43+ | ** ` escape simd ` ** | ** 9.1461 ms** | ** 1.00×** |
44+ | ` escape sonic ` | 9.3410 ms | 1.02× |
45+ | ` json-escape ` | 19.077 ms | 2.09× |
46+ | ` escape v_jsonescape ` | 20.015 ms | 2.19× |
47+ | ` serde_json ` | 21.240 ms | 2.32× |
48+ | ` escape generic ` | 22.512 ms | 2.46× |
3649
3750### GitHub Actions aarch64 (` ubuntu-24.04-arm ` )
3851
3952Neon enabled.
4053
54+ ** Short string payload (~ 76M iterations)**
55+
56+ | Implementation | Median time | vs fastest |
57+ | --------------------- | ------------ | ---------- |
58+ | ** ` escape simd ` ** | ** 65.42 ns** | ** 1.00×** |
59+ | ` escape generic ` | 108.28 ns | 1.66× |
60+ | ` serde_json ` | 110.73 ns | 1.69× |
61+ | ` json-escape ` | 150.64 ns | 2.30× |
62+ | ` escape v_jsonescape ` | 183.41 ns | 2.80× |
63+ | ` escape sonic ` | 212.87 ns | 3.25× |
64+
4165** RxJS payload (~ 10k iterations)**
4266
4367| Implementation | Median time | vs fastest |
4468| --------------------- | ------------- | ---------- |
45- | ** ` escape generic ` ** | ** 546.89 µs** | ** 1.00×** |
46- | ` escape simd ` | 589.29 µs | 1.08× |
47- | ` serde_json ` | 612.33 µs | 1.12× |
48- | ` json-escape ` | 624.66 µs | 1.14× |
49- | ` escape v_jsonescape ` | 789.14 µs | 1.44× |
69+ | ** ` escape simd ` ** | ** 283.40 µs** | ** 1.00×** |
70+ | ` escape sonic ` | 305.34 µs | 1.08× |
71+ | ` json-escape ` | 468.04 µs | 1.65× |
72+ | ` escape generic ` | 548.50 µs | 1.94× |
73+ | ` serde_json ` | 567.23 µs | 2.00× |
74+ | ` escape v_jsonescape ` | 758.18 µs | 2.68× |
5075
5176** Fixtures payload (~ 300 iterations)**
5277
5378| Implementation | Median time | vs fastest |
54- | --------------------- | ------------ | ---------- |
55- | ** ` escape generic ` ** | ** 17.81 ms** | ** 1.00×** |
56- | ` serde_json ` | 19.77 ms | 1.11× |
57- | ` json-escape ` | 20.84 ms | 1.17× |
58- | ` escape simd ` | 21.04 ms | 1.18× |
59- | ` escape v_jsonescape ` | 25.57 ms | 1.44× |
79+ | --------------------- | ------------- | ---------- |
80+ | ** ` escape simd ` ** | ** 10.46 ms** | ** 1.00×** |
81+ | ` escape sonic ` | 11.18 ms | 1.07× |
82+ | ` json-escape ` | 15.45 ms | 1.48× |
83+ | ` escape generic ` | 17.75 ms | 1.70× |
84+ | ` serde_json ` | 18.01 ms | 1.72× |
85+ | ` escape v_jsonescape ` | 24.93 ms | 2.38× |
6086
6187### GitHub Actions macOS (` macos-latest ` )
6288
6389> Apple M1 chip
6490
91+ ** Short string payload (~ 45M iterations)**
92+
93+ | Implementation | Median time | vs fastest |
94+ | --------------------- | ------------- | ---------- |
95+ | ** ` escape simd ` ** | ** 113.16 ns** | ** 1.00×** |
96+ | ` serde_json ` | 128.52 ns | 1.14× |
97+ | ` escape generic ` | 136.06 ns | 1.20× |
98+ | ` json-escape ` | 173.16 ns | 1.53× |
99+ | ` escape v_jsonescape ` | 198.80 ns | 1.76× |
100+ | ` escape sonic ` | 226.21 ns | 2.00× |
101+
65102** RxJS payload (~ 10k iterations)**
66103
67104| Implementation | Median time | vs fastest |
68105| --------------------- | ------------- | ---------- |
69- | ** ` escape generic ` ** | ** 759.07 µs** | ** 1.00×** |
70- | ` escape simd ` | 764.98 µs | 1.01× |
71- | ` serde_json ` | 793.91 µs | 1.05× |
72- | ` json-escape ` | 868.21 µs | 1.14× |
73- | ` escape v_jsonescape ` | 926.00 µs | 1.22× |
106+ | ** ` escape sonic ` ** | ** 379.94 µs** | ** 1.00×** |
107+ | ` escape simd ` | 395.41 µs | 1.04× |
108+ | ` json-escape ` | 618.74 µs | 1.63× |
109+ | ` escape generic ` | 690.86 µs | 1.82× |
110+ | ` serde_json ` | 720.05 µs | 1.89× |
111+ | ` escape v_jsonescape ` | 839.86 µs | 2.21× |
74112
75- ** Fixtures payload (~ 300 iterations)**
113+ ** AFFiNE sources payload (~ 300 iterations)**
76114
77115| Implementation | Median time | vs fastest |
78116| --------------------- | ------------ | ---------- |
79- | ** ` serde_json ` ** | ** 26.41 ms** | ** 1.00×** |
80- | ` escape generic ` | 26.43 ms | 1.00× |
81- | ` escape simd ` | 26.42 ms | 1.00× |
82- | ` json-escape ` | 28.94 ms | 1.10× |
83- | ` escape v_jsonescape ` | 29.22 ms | 1.11× |
117+ | ** ` escape simd ` ** | ** 12.60 ms** | ** 1.00×** |
118+ | ` escape sonic ` | 14.04 ms | 1.11× |
119+ | ` json-escape ` | 21.54 ms | 1.71× |
120+ | ` serde_json ` | 23.33 ms | 1.85× |
121+ | ` escape generic ` | 24.55 ms | 1.95× |
122+ | ` escape v_jsonescape ` | 26.82 ms | 2.13× |
84123
85124### Apple M3 Max
86125
126+ ** Short string benchmark**
127+
128+ | Implementation | Median time | vs fastest |
129+ | --------------------- | ------------- | ---------- |
130+ | ** ` escape simd ` ** | ** 90.58 ns** | ** 1.00×** |
131+ | ` serde_json ` | 139.23 ns | 1.54× |
132+ | ` escape generic ` | 146.15 ns | 1.61× |
133+ | ` json-escape ` | 173.60 ns | 1.92× |
134+ | ` escape v_jsonescape ` | 198.60 ns | 2.19× |
135+ | ` escape sonic ` | 199.27 ns | 2.20× |
136+
87137** RxJS payload (~ 10k iterations)**
88138
89139| Implementation | Median time | vs fastest |
90140| --------------------- | ------------- | ---------- |
91141| ** ` escape simd ` ** | ** 196.07 µs** | ** 1.00×** |
92142| ` escape sonic ` | 196.32 µs | 1.00× |
143+ | ` json-escape ` | 446.94 µs | 2.28× |
93144| ` escape generic ` | 488.37 µs | 2.49× |
94145| ` serde_json ` | 553.08 µs | 2.82× |
95146| ` escape v_jsonescape ` | 618.31 µs | 3.15× |
96- | ` json-escape ` | 446.94 µs | 2.28× |
97147
98- ** Fixtures payload (~ 300 iterations)**
148+ ** AFFiNE sources payload (~ 300 iterations)**
99149
100150| Implementation | Median time | vs fastest |
101151| --------------------- | ------------ | ---------- |
@@ -105,14 +155,3 @@ Neon enabled.
105155| ` json-escape ` | 18.01 ms | 1.74× |
106156| ` serde_json ` | 19.00 ms | 1.83× |
107157| ` escape v_jsonescape ` | 21.38 ms | 2.06× |
108-
109- ** Short string benchmark**
110-
111- | Implementation | Median time | vs fastest |
112- | --------------------- | ------------- | ---------- |
113- | ** ` escape simd ` ** | ** 90.58 ns** | ** 1.00×** |
114- | ` serde_json ` | 139.23 ns | 1.54× |
115- | ` escape generic ` | 146.15 ns | 1.61× |
116- | ` json-escape ` | 173.60 ns | 1.92× |
117- | ` escape v_jsonescape ` | 198.60 ns | 2.19× |
118- | ` escape sonic ` | 199.27 ns | 2.20× |
0 commit comments