carlos / todomvc-bakeoff Public

Clone
git clone https://amadan.net/carlos/todomvc-bakeoff

Plain git — no account needed to clone.

Download

Download this file

1{
2 "Slug": "zig",
3 "Language": "Zig",
4 "Status": "LIVE",
5 "URL": "https://todo-zig-2.bfj.oncarlos.com",
6 "Version": "73268e0",
7 "Stack": "",
8 "Source": "https://amadan.net/carlos/todomvc-bakeoff?ref=main\u0026path=apps/zig",
9 "BehaviourJSOn": {
10 "Passed": 35,
11 "Failed": 0,
12 "Skipped": 0
13 },
14 "BehaviourJSOff": {
15 "Passed": 32,
16 "Failed": 0,
17 "Skipped": 3
18 },
19 "TTFBEmpty": {
20 "N": 30,
21 "P50": 50.229,
22 "P95": 58.291,
23 "P99": 58.392,
24 "Min": 44.68,
25 "Max": 58.392
26 },
27 "TTFB50": {
28 "N": 30,
29 "P50": 54.132,
30 "P95": 61.266,
31 "P99": 65.122,
32 "Min": 48.154,
33 "Max": 65.122
34 },
35 "Wake": [
36 1237.608,
37 1376.089,
38 1201.547
39 ],
40 "Load": [
41 {
42 "Scenario": "read",
43 "Concurrency": 1,
44 "RPS": 77.88700892202256,
45 "P50Ms": 12.89359,
46 "P95Ms": 17.391070000000003,
47 "P99Ms": 21.104159,
48 "ErrorRate": 0,
49 "Status": {
50 "200": 778
51 }
52 },
53 {
54 "Scenario": "read",
55 "Concurrency": 2,
56 "RPS": 146.06805739900383,
57 "P50Ms": 13.036715000000001,
58 "P95Ms": 18.88113,
59 "P99Ms": 24.536747000000002,
60 "ErrorRate": 0,
61 "Status": {
62 "200": 1459
63 }
64 },
65 {
66 "Scenario": "read",
67 "Concurrency": 4,
68 "RPS": 112.38885203737756,
69 "P50Ms": 35.100674,
70 "P95Ms": 39.683425,
71 "P99Ms": 44.626512,
72 "ErrorRate": 0,
73 "Status": {
74 "200": 1120
75 }
76 },
77 {
78 "Scenario": "read",
79 "Concurrency": 8,
80 "RPS": 222.8484551077639,
81 "P50Ms": 35.448401,
82 "P95Ms": 40.447213000000005,
83 "P99Ms": 47.030191,
84 "ErrorRate": 0,
85 "Status": {
86 "200": 2221
87 }
88 },
89 {
90 "Scenario": "read",
91 "Concurrency": 16,
92 "RPS": 412.4167107959877,
93 "P50Ms": 36.62036,
94 "P95Ms": 46.308214,
95 "P99Ms": 104.57195800000001,
96 "ErrorRate": 0,
97 "Status": {
98 "200": 4110
99 }
100 },
101 {
102 "Scenario": "read",
103 "Concurrency": 32,
104 "RPS": 1381.6088099712952,
105 "P50Ms": 19.012087,
106 "P95Ms": 46.697122,
107 "P99Ms": 80.0428,
108 "ErrorRate": 0,
109 "Status": {
110 "200": 13792
111 }
112 },
113 {
114 "Scenario": "read",
115 "Concurrency": 64,
116 "RPS": 1322.2119551198723,
117 "P50Ms": 44.491989000000004,
118 "P95Ms": 83.988829,
119 "P99Ms": 128.54729,
120 "ErrorRate": 0,
121 "Status": {
122 "200": 13162
123 }
124 },
125 {
126 "Scenario": "read",
127 "Concurrency": 128,
128 "RPS": 1191.4827795829715,
129 "P50Ms": 90.87234600000001,
130 "P95Ms": 181.238567,
131 "P99Ms": 624.785731,
132 "ErrorRate": 0,
133 "Status": {
134 "200": 11789
135 }
136 },
137 {
138 "Scenario": "toggle",
139 "Concurrency": 1,
140 "RPS": 97.58213406764388,
141 "P50Ms": 9.74184,
142 "P95Ms": 14.121995,
143 "P99Ms": 16.461793,
144 "ErrorRate": 0,
145 "Status": {
146 "303": 975
147 }
148 },
149 {
150 "Scenario": "toggle",
151 "Concurrency": 2,
152 "RPS": 57.890097482017,
153 "P50Ms": 33.737747999999996,
154 "P95Ms": 38.267145,
155 "P99Ms": 42.018508000000004,
156 "ErrorRate": 0,
157 "Status": {
158 "303": 577
159 }
160 },
161 {
162 "Scenario": "toggle",
163 "Concurrency": 4,
164 "RPS": 116.28319278779234,
165 "P50Ms": 33.452189,
166 "P95Ms": 38.918751,
167 "P99Ms": 61.337942,
168 "ErrorRate": 0,
169 "Status": {
170 "303": 1159
171 }
172 },
173 {
174 "Scenario": "toggle",
175 "Concurrency": 8,
176 "RPS": 233.1553677207922,
177 "P50Ms": 33.461301999999996,
178 "P95Ms": 37.974313,
179 "P99Ms": 42.06469,
180 "ErrorRate": 0,
181 "Status": {
182 "303": 2324
183 }
184 },
185 {
186 "Scenario": "toggle",
187 "Concurrency": 16,
188 "RPS": 1164.6645316189908,
189 "P50Ms": 13.249912,
190 "P95Ms": 18.737178,
191 "P99Ms": 26.308294,
192 "ErrorRate": 0,
193 "Status": {
194 "303": 11633
195 }
196 },
197 {
198 "Scenario": "toggle",
199 "Concurrency": 32,
200 "RPS": 2005.7317940043981,
201 "P50Ms": 14.225914,
202 "P95Ms": 24.668327,
203 "P99Ms": 56.775147,
204 "ErrorRate": 0,
205 "Status": {
206 "303": 20030
207 }
208 },
209 {
210 "Scenario": "toggle",
211 "Concurrency": 64,
212 "RPS": 2955.2850468024517,
213 "P50Ms": 18.466985,
214 "P95Ms": 41.679489,
215 "P99Ms": 64.940055,
216 "ErrorRate": 0,
217 "Status": {
218 "303": 29496
219 }
220 },
221 {
222 "Scenario": "toggle",
223 "Concurrency": 128,
224 "RPS": 3113.0801640486206,
225 "P50Ms": 37.396502,
226 "P95Ms": 74.641883,
227 "P99Ms": 99.03120899999999,
228 "ErrorRate": 0,
229 "Status": {
230 "303": 31014
231 }
232 },
233 {
234 "Scenario": "toggle",
235 "Concurrency": 256,
236 "RPS": 2852.029798919397,
237 "P50Ms": 82.560651,
238 "P95Ms": 143.569693,
239 "P99Ms": 292.787836,
240 "ErrorRate": 0,
241 "Status": {
242 "303": 28275
243 }
244 },
245 {
246 "Scenario": "read-after",
247 "Concurrency": 1,
248 "RPS": 83.88846385978232,
249 "P50Ms": 10.831252,
250 "P95Ms": 16.408281,
251 "P99Ms": 18.249034,
252 "ErrorRate": 0,
253 "Status": {
254 "200": 838
255 }
256 },
257 {
258 "Scenario": "read-after",
259 "Concurrency": 2,
260 "RPS": 53.79174863085629,
261 "P50Ms": 37.299525,
262 "P95Ms": 40.807924,
263 "P99Ms": 45.99678,
264 "ErrorRate": 0,
265 "Status": {
266 "200": 536
267 }
268 },
269 {
270 "Scenario": "read-after",
271 "Concurrency": 4,
272 "RPS": 109.88744945770132,
273 "P50Ms": 35.907785,
274 "P95Ms": 40.107679,
275 "P99Ms": 56.229563000000006,
276 "ErrorRate": 0,
277 "Status": {
278 "200": 1095
279 }
280 },
281 {
282 "Scenario": "read-after",
283 "Concurrency": 8,
284 "RPS": 226.2769583983479,
285 "P50Ms": 34.819027000000006,
286 "P95Ms": 39.436487,
287 "P99Ms": 47.904785,
288 "ErrorRate": 0,
289 "Status": {
290 "200": 2255
291 }
292 },
293 {
294 "Scenario": "read-after",
295 "Concurrency": 16,
296 "RPS": 1003.252389168501,
297 "P50Ms": 14.899234000000002,
298 "P95Ms": 24.326863,
299 "P99Ms": 35.183328,
300 "ErrorRate": 0,
301 "Status": {
302 "200": 10018
303 }
304 },
305 {
306 "Scenario": "read-after",
307 "Concurrency": 32,
308 "RPS": 1379.18020040817,
309 "P50Ms": 19.593666,
310 "P95Ms": 43.099363000000004,
311 "P99Ms": 65.71508700000001,
312 "ErrorRate": 0,
313 "Status": {
314 "200": 13761
315 }
316 },
317 {
318 "Scenario": "read-after",
319 "Concurrency": 64,
320 "RPS": 1332.810865208394,
321 "P50Ms": 41.771109,
322 "P95Ms": 85.935605,
323 "P99Ms": 184.94097100000002,
324 "ErrorRate": 0,
325 "Status": {
326 "200": 13266
327 }
328 },
329 {
330 "Scenario": "read-after",
331 "Concurrency": 128,
332 "RPS": 1127.0060690034552,
333 "P50Ms": 88.25514600000001,
334 "P95Ms": 276.707488,
335 "P99Ms": 703.035536,
336 "ErrorRate": 0,
337 "Status": {
338 "200": 11146
339 }
340 }
341 ],
342 "Weight": {
343 "HTMLBytes": 35808,
344 "JSBytes": 3854
345 },
346 "Memory": {
347 "IdleKB": 2512,
348 "PeakKB": 25884,
349 "AfterKB": 23444
350 },
351 "Code": {
352 "Server": 964,
353 "Templates": 0,
354 "JS": 94,
355 "Tests": 59,
356 "Deps": 1
357 },
358 "Build": {
359 "ColdSeconds": 151.72579616,
360 "WarmSeconds": 5.378776474,
361 "EditSeconds": 5.416322927,
362 "Bytes": 1918040,
363 "Host": "DOCS-T1",
364 "ColdRuns": 1,
365 "Runs": 3
366 },
367 "TokensBuild": {
368 "Input": 172,
369 "Output": 62991,
370 "CacheRead": 9913615,
371 "CacheWrite": 158246,
372 "Turns": 92,
373 "Seconds": 1791.585,
374 "CostUSD": 4.509198999999999
375 },
376 "TokensFix": {
377 "Input": 26,
378 "Output": 8226,
379 "CacheRead": 2312162,
380 "CacheWrite": 15063,
381 "Turns": 13,
382 "Seconds": 285.943,
383 "CostUSD": 0.7475604000000002
384 },
385 "TokensSecurity": {
386 "Input": 16,
387 "Output": 4078,
388 "CacheRead": 1544666,
389 "CacheWrite": 8418,
390 "Turns": 8,
391 "Seconds": 137.2,
392 "CostUSD": 0.45790120000000023
393 },
394 "TokensReview": {
395 "Input": 834801,
396 "Output": 3599,
397 "CacheRead": 691712,
398 "CacheWrite": 0,
399 "Turns": 3,
400 "Seconds": 0,
401 "CostUSD": 0
402 },
403 "Readability": {
404 "Naming": 5,
405 "Structure": 5,
406 "Traceability": 5,
407 "Errors": 4,
408 "Comments": 5,
409 "Overall": 9,
410 "Notes": "Strongest: a request is trivially traceable (app.js form → handle → post → itemAction → Store.toggle → page/303), helped by the Response/Visitor/Form structs and tight module split. Comments earn their place: why headers are copied before reading the body, why keep-alive drops after an oversized body, why a single mutexed SQLite connection. Tests double as documentation. Weakest: errors in db.zig collapse to one opaque error.Sqlite with logging as the only detail; readerExpectContinue's failure is remapped to WriteFailed, hiding the cause; post() mixes routing and handling in one long if-chain, and get() parses the query inline. Minor: static() and run() names are terse."
411 },
412 "ReviewFindings": null,
413 "Notes": null
414}
415