01Question
A narrow, indexed D1 query inside the same-region Worker adds little enough latency that per-request rendering needs no cache layer for a portfolio-scale site.
02Method
Instrumented the API Worker to record time spent in D1 versus time spent serialising, and the frontend Worker to record service-binding round trip versus React render. Compared a warm and a cold invocation on the same route.
03Outcome
Preliminary. The service-binding hop is not the cost; it is genuinely cheap compared with a public fetch. The dominant term on content-heavy routes is the number of queries rather than the size of any one of them, which points at the classic fan-out problem: a project page fetching tags, media and links separately.
Next step is batching those into a single d1.batch() call and re-measuring. If that lands where I expect, no cache layer is needed at this scale.