Research: Workers Cache savings estimate (2026-07-07)
Date: 2026-07-07 · HTMA calibrated measurement brief. No code changed.
Summary
Section titled “Summary”Adopting Cloudflare’s new Workers Cache on the thumbnail worker saves an estimated ~$1–$12/month (central ~$5/mo) in the realistic scoped, post-Snippet-URL-encoding case, with a hard ceiling near ~$13/mo. Near-term (fixed-variant surfaces only) it’s <$2/mo. Enabled naively/globally it increases cost by $5–$15+/mo (it converts page-rule-served “free” hits into billed requests) and re-creates the referrer-blind variant lottery. This is not a cost play — adopt Workers Cache for request-collapsing/latency/resilience, not to save money.
Question made precise
Section titled “Question made precise”- Decision: adopt Workers Cache for cost savings, and if so how (scoped vs global, before vs after the Snippet encodes the variant in the URL)?
- Quantity: net recurring Cloudflare spend change (positive = savings). Unit: USD/mo.
- Horizon: steady-state monthly at current traffic.
- Threshold: repo rule flags any change ≥ ±$1/mo (this memo satisfies it); the “worth-doing-alone” bar is ~$10/mo.
Why the saving is small (the mechanism)
Section titled “Why the saving is small (the mechanism)”A Workers-Cache hit skips the worker, which removes the worker’s KV read
($0.50/1M) and any worker-side R2 read — but the request line still bills ($0.30/1M)
and CPU is already free (worker averages 0.58 ms/req ⇒ ~17M CPU-ms/mo, under the 30M
free tier). So the only real saving is eliminated KV reads, capped by the whole KV bill.
Confirmed anchors (rates are Cloudflare public pricing; the blended model matches the cost-safe cache-purging runbook):
- Worker-path blended ~$1.07/1M = ~$0.504/1M request + 1.13 × ~$0.50/1M KV.
- R2 Class B GET ~$0.36/1M.
- Current KV read bill ~$12.28/mo (~34.6M reads/mo after 10M free).
- Derived: worker runs ~30M×/mo (34.6M KV ÷ 1.13). CPU ≈ $0 (under free tier).
Decomposition — realistic scoped saving (post-URL-variant, ~40–70% capture)
Section titled “Decomposition — realistic scoped saving (post-URL-variant, ~40–70% capture)”| Component | Low | Central | High | Basis |
|---|---|---|---|---|
| Eliminated KV reads | $2 | $5 | $9 | 30M inv × 1.13 KV × $0.50/1M × capture% |
| Eliminated worker R2 Layer-2 reads | $0.5 | $1.5 | $3 | subset of R2 GET × $0.36/1M |
| Eliminated CPU | $0 | $0 | $0.5 | already under free tier |
| Request-line change (scoped) | $0 | $0 | $0 | hits still bill the request |
| Net (scoped, post-URL-variant) | ~$2.5 | ~$6 | ~$12 | sum |
- Ceiling (100% capture, unrealistic): ~$13–15/mo.
- Near-term (fixed-variant surfaces only): ~$0.3–$2/mo (central ~$1) — those surfaces are already cheap.
- Downside (naive/global enable): converting even 20% of ~150M/mo page-rule-served requests to billed requests ≈ +$9/mo; range −$5 to −$15+/mo.
Calibrated range
Section titled “Calibrated range”90% CI for the realistic scoped saving is $1–$12/mo, central ~$5. The swing is dominated by an unmeasured capture share, not by the (known) unit rates. >90% confident the saving is < ~$13/mo (structural ceiling) and > $0 only if scoped correctly — a naive enable can be negative.
Value of information
Section titled “Value of information”- Capture share + page-rule billing interaction (biggest swing) → resolve with a
1-week Workers Cache pilot on a fixed-variant surface, tracking
Cf-Cache-Statushit rate and the KV-read / invocation / billed-request deltas. This settles the whole question. - Actual worker-invocation metric (tightens the ~30M/mo derivation ±30%).
- Skip external pricing lookups — the rates are known and not the bottleneck (VoI ≈ 0).
Stop rule: if the pilot shows a scoped saving under ~$3/mo (likely), the cost case is settled — adopt for non-cost reasons or not at all.
Recommendation
Section titled “Recommendation”Do not adopt Workers Cache to save money. Central ~$5/mo (CI $1–$12) is below the ~$10/mo worth-it-alone bar, CPU savings are ~$0, and a naive global enable can raise the bill while breaking deterministic delivery. Instead:
- For the cheap KV win now: ship the already-planned entitlement
cacheTtl 60→300stuning — same headroom, no new feature. - Adopt Workers Cache after the Snippet encodes the variant in the URL, for request-collapsing/latency/resilience; take the ~$5/mo as a byproduct.
- Confirm sign and size with the 1-week fixed-variant pilot before any enable.
Sources
Section titled “Sources”- Feature behavior & billing model: Workers Cache research
- Blended cost model / unit rates: cost-safe cache-purging runbook
- Cloudflare Workers pricing (public): https://developers.cloudflare.com/workers/platform/pricing/
- KV volume/bill +
cacheTtltuning, R2 GET volume, and worker avg CPU are internal repo artifacts — pointed to in the tracked repo copy, not reproduced here.
{ "quantity": "recurring monthly Cloudflare cost saving from adopting Workers Cache (scoped, post-URL-variant)", "unit": "USD/month", "low_90": 1, "central": 5, "high_90": 12, "confidence": "90%", "decision_threshold": 10, "threshold_implication": "Below the ~$10/mo worth-it-alone bar (ceiling ~$13/mo); naive global enable is negative. Not a cost play — adopt post-URL-variant for collapsing/latency; ship cacheTtl 60->300s for the cheap KV win.", "top_uncertainty_driver": "capture share of worker invocations converted to Workers-Cache hits, plus whether enabling converts page-rule-served free hits into billed requests", "estimate_status": "estimated", "next_measurement_step": "1-week Workers Cache pilot on a fixed-variant surface measuring Cf-Cache-Status hit rate and KV-read / invocation / billed-request deltas"}