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": "nim",
3 "Language": "Nim",
4 "Status": "LIVE",
5 "URL": "https://todo-nim-2.bfj.oncarlos.com",
6 "Version": "290dbb4",
7 "Stack": "",
8 "Source": "https://amadan.net/carlos/todomvc-bakeoff?ref=main\u0026path=apps/nim",
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.615,
22 "P95": 57.717,
23 "P99": 59.587,
24 "Min": 42.26,
25 "Max": 59.587
26 },
27 "TTFB50": {
28 "N": 30,
29 "P50": 50.809,
30 "P95": 54.648,
31 "P99": 55.361,
32 "Min": 42.03,
33 "Max": 55.361
34 },
35 "Wake": [
36 1258.989,
37 1299.455,
38 1482.318
39 ],
40 "Load": [
41 {
42 "Scenario": "read",
43 "Concurrency": 1,
44 "RPS": 70.59193464557255,
45 "P50Ms": 13.352138,
46 "P95Ms": 19.413396,
47 "P99Ms": 28.020539,
48 "ErrorRate": 0,
49 "Status": {
50 "200": 705
51 }
52 },
53 {
54 "Scenario": "read",
55 "Concurrency": 2,
56 "RPS": 135.58301603079727,
57 "P50Ms": 14.069557999999999,
58 "P95Ms": 20.590862,
59 "P99Ms": 27.337004,
60 "ErrorRate": 0,
61 "Status": {
62 "200": 1354
63 }
64 },
65 {
66 "Scenario": "read",
67 "Concurrency": 4,
68 "RPS": 111.6613971587395,
69 "P50Ms": 34.91854300000001,
70 "P95Ms": 41.811622,
71 "P99Ms": 49.115617,
72 "ErrorRate": 0,
73 "Status": {
74 "200": 1113
75 }
76 },
77 {
78 "Scenario": "read",
79 "Concurrency": 8,
80 "RPS": 216.75821172625683,
81 "P50Ms": 36.132830999999996,
82 "P95Ms": 43.474199,
83 "P99Ms": 55.392836,
84 "ErrorRate": 0,
85 "Status": {
86 "200": 2160
87 }
88 },
89 {
90 "Scenario": "read",
91 "Concurrency": 16,
92 "RPS": 433.5203144575914,
93 "P50Ms": 35.824301000000006,
94 "P95Ms": 41.654306000000005,
95 "P99Ms": 60.738893000000004,
96 "ErrorRate": 0,
97 "Status": {
98 "200": 4320
99 }
100 },
101 {
102 "Scenario": "read",
103 "Concurrency": 32,
104 "RPS": 1424.4061633833335,
105 "P50Ms": 20.257495,
106 "P95Ms": 38.103735,
107 "P99Ms": 51.929142999999996,
108 "ErrorRate": 0,
109 "Status": {
110 "200": 14215
111 }
112 },
113 {
114 "Scenario": "read",
115 "Concurrency": 64,
116 "RPS": 1491.066704245307,
117 "P50Ms": 39.070859999999996,
118 "P95Ms": 74.962377,
119 "P99Ms": 97.52377600000001,
120 "ErrorRate": 0,
121 "Status": {
122 "200": 14850
123 }
124 },
125 {
126 "Scenario": "read",
127 "Concurrency": 128,
128 "RPS": 1417.8833757244988,
129 "P50Ms": 81.74195200000001,
130 "P95Ms": 148.453518,
131 "P99Ms": 297.54496800000004,
132 "ErrorRate": 0,
133 "Status": {
134 "200": 14054
135 }
136 },
137 {
138 "Scenario": "toggle",
139 "Concurrency": 1,
140 "RPS": 28.796133145815876,
141 "P50Ms": 33.794711,
142 "P95Ms": 38.067634000000005,
143 "P99Ms": 43.782537000000005,
144 "ErrorRate": 0,
145 "Status": {
146 "303": 287
147 }
148 },
149 {
150 "Scenario": "toggle",
151 "Concurrency": 2,
152 "RPS": 64.36845576836099,
153 "P50Ms": 30.397894,
154 "P95Ms": 34.127030000000005,
155 "P99Ms": 39.119851999999995,
156 "ErrorRate": 0,
157 "Status": {
158 "303": 642
159 }
160 },
161 {
162 "Scenario": "toggle",
163 "Concurrency": 4,
164 "RPS": 118.98251432969411,
165 "P50Ms": 32.773073,
166 "P95Ms": 38.083487999999996,
167 "P99Ms": 43.003522000000004,
168 "ErrorRate": 0,
169 "Status": {
170 "303": 1186
171 }
172 },
173 {
174 "Scenario": "toggle",
175 "Concurrency": 8,
176 "RPS": 236.52626400850843,
177 "P50Ms": 33.238577,
178 "P95Ms": 38.282985,
179 "P99Ms": 41.840529000000004,
180 "ErrorRate": 0,
181 "Status": {
182 "303": 2359
183 }
184 },
185 {
186 "Scenario": "toggle",
187 "Concurrency": 16,
188 "RPS": 458.65213405425544,
189 "P50Ms": 34.240441000000004,
190 "P95Ms": 39.559746,
191 "P99Ms": 46.756,
192 "ErrorRate": 0,
193 "Status": {
194 "303": 4571
195 }
196 },
197 {
198 "Scenario": "toggle",
199 "Concurrency": 32,
200 "RPS": 895.0417781841239,
201 "P50Ms": 34.465638,
202 "P95Ms": 41.20333,
203 "P99Ms": 53.813195,
204 "ErrorRate": 0,
205 "Status": {
206 "303": 8920
207 }
208 },
209 {
210 "Scenario": "toggle",
211 "Concurrency": 64,
212 "RPS": 2325.1274106361657,
213 "P50Ms": 20.904494,
214 "P95Ms": 65.712754,
215 "P99Ms": 100.531819,
216 "ErrorRate": 0,
217 "Status": {
218 "303": 23193
219 }
220 },
221 {
222 "Scenario": "toggle",
223 "Concurrency": 128,
224 "RPS": 3561.491925126408,
225 "P50Ms": 29.560194000000003,
226 "P95Ms": 76.113329,
227 "P99Ms": 101.019791,
228 "ErrorRate": 0,
229 "Status": {
230 "303": 35498
231 }
232 },
233 {
234 "Scenario": "toggle",
235 "Concurrency": 256,
236 "RPS": 3406.282792881299,
237 "P50Ms": 68.735961,
238 "P95Ms": 134.273197,
239 "P99Ms": 235.909711,
240 "ErrorRate": 0.010259897696697318,
241 "Status": {
242 "303": 33474,
243 "502": 347
244 }
245 },
246 {
247 "Scenario": "read-after",
248 "Concurrency": 1,
249 "RPS": 26.095720354053377,
250 "P50Ms": 38.273187,
251 "P95Ms": 41.876851,
252 "P99Ms": 44.739115000000005,
253 "ErrorRate": 0,
254 "Status": {
255 "200": 260
256 }
257 },
258 {
259 "Scenario": "read-after",
260 "Concurrency": 2,
261 "RPS": 52.65499968929753,
262 "P50Ms": 37.820025,
263 "P95Ms": 42.809588000000005,
264 "P99Ms": 53.856609,
265 "ErrorRate": 0,
266 "Status": {
267 "200": 525
268 }
269 },
270 {
271 "Scenario": "read-after",
272 "Concurrency": 4,
273 "RPS": 108.68806828907607,
274 "P50Ms": 35.618672,
275 "P95Ms": 41.342202,
276 "P99Ms": 48.127457,
277 "ErrorRate": 0,
278 "Status": {
279 "200": 1083
280 }
281 },
282 {
283 "Scenario": "read-after",
284 "Concurrency": 8,
285 "RPS": 215.77333524908593,
286 "P50Ms": 36.282261000000005,
287 "P95Ms": 43.485331,
288 "P99Ms": 57.049493,
289 "ErrorRate": 0,
290 "Status": {
291 "200": 2150
292 }
293 },
294 {
295 "Scenario": "read-after",
296 "Concurrency": 16,
297 "RPS": 970.8744694262514,
298 "P50Ms": 15.260093000000001,
299 "P95Ms": 25.168376,
300 "P99Ms": 38.804123000000004,
301 "ErrorRate": 0,
302 "Status": {
303 "200": 9694
304 }
305 },
306 {
307 "Scenario": "read-after",
308 "Concurrency": 32,
309 "RPS": 1356.1885018606595,
310 "P50Ms": 20.504082,
311 "P95Ms": 42.118472999999994,
312 "P99Ms": 62.477528,
313 "ErrorRate": 0,
314 "Status": {
315 "200": 13532
316 }
317 },
318 {
319 "Scenario": "read-after",
320 "Concurrency": 64,
321 "RPS": 1446.5294092910453,
322 "P50Ms": 41.003801,
323 "P95Ms": 76.852761,
324 "P99Ms": 100.06628500000001,
325 "ErrorRate": 0,
326 "Status": {
327 "200": 14405
328 }
329 },
330 {
331 "Scenario": "read-after",
332 "Concurrency": 128,
333 "RPS": 1478.9207711427773,
334 "P50Ms": 80.23451800000001,
335 "P95Ms": 144.006777,
336 "P99Ms": 212.011805,
337 "ErrorRate": 0,
338 "Status": {
339 "200": 14665
340 }
341 }
342 ],
343 "Weight": {
344 "HTMLBytes": 34737,
345 "JSBytes": 3994
346 },
347 "Memory": {
348 "IdleKB": 3556,
349 "PeakKB": 11728,
350 "AfterKB": 11728
351 },
352 "Code": {
353 "Server": 819,
354 "Templates": 75,
355 "JS": 112,
356 "Tests": 177,
357 "Deps": 2
358 },
359 "Build": {
360 "ColdSeconds": 33.907605279,
361 "WarmSeconds": 0.942850986,
362 "EditSeconds": 0.929894851,
363 "Bytes": 1760472,
364 "Host": "DOCS-T1",
365 "ColdRuns": 1,
366 "Runs": 3
367 },
368 "TokensBuild": {
369 "Input": 140,
370 "Output": 57252,
371 "CacheRead": 6685372,
372 "CacheWrite": 131701,
373 "Turns": 73,
374 "Seconds": 847.827,
375 "CostUSD": 3.536282399999999
376 },
377 "TokensFix": {
378 "Input": 34,
379 "Output": 12178,
380 "CacheRead": 2592825,
381 "CacheWrite": 19773,
382 "Turns": 17,
383 "Seconds": 275.995,
384 "CostUSD": 0.9204450000000004
385 },
386 "TokensSecurity": {
387 "Input": 14,
388 "Output": 4228,
389 "CacheRead": 1165905,
390 "CacheWrite": 8706,
391 "Turns": 7,
392 "Seconds": 154.869,
393 "CostUSD": 0.3874449999999987
394 },
395 "TokensReview": {
396 "Input": 1368520,
397 "Output": 6277,
398 "CacheRead": 1217664,
399 "CacheWrite": 0,
400 "Turns": 3,
401 "Seconds": 0,
402 "CostUSD": 0
403 },
404 "Readability": {
405 "Naming": 4,
406 "Structure": 4,
407 "Traceability": 4,
408 "Errors": 4,
409 "Comments": 5,
410 "Overall": 8,
411 "Notes": "Strongest: comments explain non-obvious decisions (maxBody sizing, trimTitle UTF-8 defect, chunked-body fix flagged in the vendored server, JS request queue and rendering flag) without noise; store.nim's prepared-statement enum plus bound/exec/count keeps SQL in one readable table; app.nim is cleanly sectioned. Weakest: `action` hand-parses path segments with len checks and a `found` flag, so the per-item verbs are harder to scan than a dispatch table would be; the `var r: Reply` side-channel for Set-Cookie headers in `listFor` is indirect; many `discard reset/finalize/close` and a stray `# make bump` comment sitting above the wrong constant. The vendored httpserver.nim is large but well-marked."
412 },
413 "ReviewFindings": [
414 "[correctness] `apps/nim/src/store.nim:181` — `$column_text(st, 1)` reads a NUL-terminated C string, although titles are stored with an explicit byte length. Posting `title=before%00after` therefore displays only `before`; saving that edit permanently loses the suffix. Read the value using `column_bytes` so accepted Unicode titles survive retrieval intact."
415 ],
416 "Notes": null
417}
418