$ Production
The most restrictive category. Production entries measure what the framework gives you out of the box, the way developers actually use it in real applications.
Use framework-level APIs
If a framework provides a documented, high-level way to accomplish a task, the benchmark implementation must use it. Bypassing the framework to hand-roll a faster solution is not permitted.
# Use the framework's built-in parameter binding
@app.get("/baseline")
def baseline(a: int, b: int):
return str(a + b)# Manually parse query string for speed
@app.get("/baseline")
def baseline(request):
qs = request.url.query.encode()
a = fast_parse_int(qs, b"a=")
b = fast_parse_int(qs, b"b=")
return custom_serialize(a + b)Settings must be production-documented
Non-default configuration is allowed only if the framework’s official production deployment guide recommends it. If there is no official documentation recommending a setting for production use, it does not belong in the benchmark.
Allowed:
- GC settings recommended in production deployment guides
- Worker/thread counts matching available CPU cores
- Connection pool sizes for the environment
Not allowed:
- Undocumented flags found by reading framework source code
- Experimental or unstable options that trade safety for speed
- Settings that disable buffering, validation, or error handling
Use standard libraries and drivers
If the ecosystem has a well-established, production-grade library for a task (database driver, JSON serializer), use it. Experimental or hand-rolled alternatives solely for benchmark performance are not permitted.
Exception: If the framework itself bundles or officially recommends a specific library, that library is acceptable.
Static files must be read from disk
For static file tests, production entries must read files from disk on every request. No in-memory caching, no memory-mapped files, no pre-loaded file buffers.
Deployment-environment tuning
Adapting to the benchmark hardware is permitted:
- Setting worker count to match CPU cores
- Configuring connection pool sizes
- Adjusting memory limits for the container
The boundary is: adapt to the environment, do not exploit it.