Summary
The sequential benchmarks from #424 (PR #464) show Blazor is 1.0x-2.7x faster for single-request response times. However, the real performance story -- especially for database-bound pages like ContosoUniversity Students -- requires concurrent load testing to capture throughput, latency under pressure, and resource utilization differences.
Motivation
Current benchmark results (single sequential requests):
| App |
Page |
Framework |
Blazor |
Speedup |
| WingtipToys |
Home |
6.4ms |
2.4ms |
2.7x |
| WingtipToys |
ProductList |
8.3ms |
3.6ms |
2.3x |
| ContosoUniversity |
Home |
2.2ms |
1.6ms |
1.4x |
| ContosoUniversity |
Students |
6.5ms |
6.3ms |
~1.0x |
The ContosoUniversity Students page shows almost no improvement because:
- DB is the bottleneck -- both EF6 and EF Core hit the same LocalDB; framework overhead is negligible vs query time
- Sequential requests don't stress the pipeline -- Web Forms' synchronous page lifecycle and ViewState serialization overhead only manifest under concurrent load
- Blazor's async pipeline advantage is invisible -- async/await throughout the Blazor stack should handle concurrent requests more efficiently, but you can't see that with one request at a time
Proposed Work
1. Load test tooling
Use bombardier or similar HTTP load testing tool to run concurrent benchmarks:
- 10, 25, 50, 100 concurrent connections
- 30-second test duration per configuration
- Measure: requests/sec, avg latency, p50/p95/p99 latency, error rate
2. Test matrix
Same 4 apps and page sets as #424:
- WingtipToys (Framework) -- Home, ProductList, About
- AfterWingtipToys (Blazor) -- Home, ProductList, About
- ContosoUniversity (Framework) -- Home.aspx, Students.aspx, About.aspx
- AfterContosoUniversity (Blazor) -- Home, Students, About
3. Metrics to capture
- Throughput (req/sec) at each concurrency level
- Latency distribution (p50, p95, p99) under load
- Error rate under pressure
- Memory usage (process working set) during load test
- Thread pool saturation indicators
4. Expected findings
- Blazor should show significantly better throughput scaling due to async pipeline
- Web Forms thread-per-request model should saturate earlier
- Database-bound pages (Students) should show divergence at higher concurrency as framework overhead compounds
- ViewState serialization overhead in WingtipToys ProductList should amplify under load
5. Deliverables
scripts/Run-LoadTests.ps1 -- orchestrator script
- Updated
dev-docs/benchmarks/ with load test results, charts, and analysis
- Performance benchmark skill update with load test patterns
Acceptance Criteria
References
Summary
The sequential benchmarks from #424 (PR #464) show Blazor is 1.0x-2.7x faster for single-request response times. However, the real performance story -- especially for database-bound pages like ContosoUniversity Students -- requires concurrent load testing to capture throughput, latency under pressure, and resource utilization differences.
Motivation
Current benchmark results (single sequential requests):
The ContosoUniversity Students page shows almost no improvement because:
Proposed Work
1. Load test tooling
Use bombardier or similar HTTP load testing tool to run concurrent benchmarks:
2. Test matrix
Same 4 apps and page sets as #424:
3. Metrics to capture
4. Expected findings
5. Deliverables
scripts/Run-LoadTests.ps1-- orchestrator scriptdev-docs/benchmarks/with load test results, charts, and analysisAcceptance Criteria
References
scripts/Run-Benchmarks.ps1-- Existing benchmark infrastructure to extend.squad/skills/performance-benchmarks/SKILL.md-- Benchmark execution skill