CDN Performance Benchmarking: Methodology and Tools

· Alex Petrov · 4 min read

Why Benchmark CDNs

CDN performance varies by: geographic region (a CDN fast in the US may be slow in Southeast Asia), content type (static vs. dynamic), time of day (congestion patterns), and configuration (your specific cache rules and origin setup). Generic "fastest CDN" claims are meaningless without context. Benchmark with your own content, from your users' locations. For foundational context, read CDN Monitoring and Observability: Metrics That Matter — FlyFish NWA.

Benchmarking Methodology

Step 1: Define What You're Measuring

Step 2: Choose Testing Locations

Test from locations where your users are. A CDN optimized for North America won't help if 40% of your users are in Asia.

Performance Comparison: Edge vs Origin Processing
Metric Edge Processing Origin Processing Improvement
Latency (p50)8–15 ms120–300 ms15–20x faster
Cache Hit Ratio85–95%N/AReduces origin load
TLS Handshake1–5 ms (nearby PoP)50–150 ms10–30x faster
Bandwidth Cost$0.01–0.04/GB$0.05–0.12/GB3–5x cheaper
Availability99.99% (multi-PoP)99.9% (single DC)10x fewer outages
CDN Performance Dashboard — Core Web Vitals with CDN optimizationCDN Performance Dashboard — Core Web Vitals with CDN optimization CDN Performance Dashboard — Core Web Vitals Core Web Vitals with CDN LCP 1.8s Target: < 2.5s Good FID 45ms Target: < 100ms Good CLS 0.05 Target: < 0.1 Good TTFB 120ms Target: < 800ms Good
Figure 1: CDN Performance Dashboard — Core Web Vitals with CDN optimization
If your audience is:
60% US → Test from 5 US cities (East + West + Central)
20% Europe → Test from London, Frankfurt, Paris
15% Asia → Test from Tokyo, Singapore, Mumbai
5% Other → Test from São Paulo, Sydney

Step 3: Test Methodology

Testing Tools

ToolTypeBest For
CatchpointSyntheticEnterprise-grade, 800+ locations
WebPageTestSyntheticFree, detailed waterfall analysis
Datadog SyntheticsSyntheticIntegration with APM stack
curl + cronDIYSimple, free, customizable

Simple DIY Benchmark Script

#!/bin/bash
# Test TTFB from current location
for cdn in cloudflare cloudfront fastly; do
  echo "=== $cdn ==="
  for i in $(seq 1 100); do
    curl -o /dev/null -s -w "%{time_starttransfer}
"       "https://$cdn-test.example.com/benchmark.jpg"
  done | awk '{sum+=$1} END {print "Avg TTFB:", sum/NR, "s"}'
done

Interpreting Results

Look at percentiles, not averages. P50 shows typical experience; P95 shows tail latency; P99 shows worst-case. A CDN with 20ms P50 but 500ms P99 has an intermittent problem that averages hide.

Request Timing — Latency breakdown across the CDN stackRequest Timing — Latency breakdown across the CDN stack CDN Request Flow — From Browser to Edge CDN Request Lifecycle Step 1 DNS Lookup Step 2 TCP Connect Step 3 TLS Handshake Step 4 Edge Server Step 5 Cache Check Step 6 Response Cache HIT → 5ms response Cache MISS → Fetch origin 0ms ~50ms (cache hit) ~200ms (cache miss)
Figure 2: Request Timing — Latency breakdown across the CDN stack

Common Pitfalls

External References

References & Standards: W3C Web Performance · Cloudflare documentation