Skip to content

Commit d6d8605

Browse files
committed
cleanup
1 parent f351892 commit d6d8605

File tree

1 file changed

+12
-17
lines changed

1 file changed

+12
-17
lines changed

src/blog/tanstack-start-ssr-performance-600-percent.md

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -263,13 +263,13 @@ Benchmark: placeholder text, should link to Matteo's article.
263263

264264
### Summary
265265

266-
| Metric | Before | After | Improvement |
267-
| ------------- | --------: | ---------: | ------------ |
268-
| Success Rate | 75.52% | 100% | +32% |
269-
| Throughput | 477 req/s | 1041 req/s | +118% (2.2x) |
270-
| Avg Latency | 3,171ms | 13.7ms | 231x faster |
271-
| p(90) Latency | 10,001ms | 23.0ms | 435x faster |
272-
| p(95) Latency | 10,001ms | 29.1ms | 343x faster |
266+
| Metric | Before | After | Improvement |
267+
| ------------- | --------: | ---------: | ------------------------ |
268+
| Success Rate | 75.52% | 100% | does not fail under load |
269+
| Throughput | 477 req/s | 1041 req/s | +118% (2.2x) |
270+
| Avg Latency | 3,171ms | 13.7ms | 231x faster |
271+
| p(90) Latency | 10,001ms | 23.0ms | 435x faster |
272+
| p(95) Latency | 10,001ms | 29.1ms | 343x faster |
273273

274274
The "before" numbers show a server under severe stress: 25% of requests failed (likely timeouts), and p90/p95 hit the 10s timeout ceiling. After the optimizations, the server handles the same load comfortably with sub-30ms tail latency and zero failures.
275275

@@ -279,25 +279,20 @@ To be clear: TanStack Start was not broken before these changes. Under normal tr
279279

280280
The following graphs show event-loop utilization[^elu] against throughput for each feature-focused endpoint, before and after the optimizations. Lower utilization at the same req/s means more headroom; higher req/s at the same utilization means more capacity.
281281

282-
#### links-100
282+
For reference, the machine on which these were measured reaches 100% event-loop utilization at 100k req/s on an empty node http server.
283+
284+
#### 100 links per page
283285

284286
![Event-loop utilization vs throughput for links-100, before and after](/blog-assets/tanstack-start-ssr-performance-600-percent/elu-links.png)
285287

286-
#### layouts-26-with-params
288+
#### Deeply nested layout routes
287289

288290
![Event-loop utilization vs throughput for nested routes, before and after](/blog-assets/tanstack-start-ssr-performance-600-percent/elu-nested.png)
289291

290-
#### empty (baseline)
292+
#### Minimal route (baseline)
291293

292294
![Event-loop utilization vs throughput for minimal route, before and after](/blog-assets/tanstack-start-ssr-performance-600-percent/elu-empty.png)
293295

294-
### Flamegraph evidence slots
295-
296-
- `<!-- FLAMEGRAPH: links-100 before -->`
297-
- `<!-- FLAMEGRAPH: links-100 after -->`
298-
- `<!-- FLAMEGRAPH: layouts-26-with-params before -->`
299-
- `<!-- FLAMEGRAPH: layouts-26-with-params after -->`
300-
301296
## Conclusion
302297

303298
The biggest gains came from removing whole categories of work from the server hot path. The general lesson is simple: throughput improves when you eliminate repeated work, allocations, and unnecessary generality in the steady state.

0 commit comments

Comments
 (0)