Latency directly impacts user experience and revenue. According to a 2023 Google study, a 100 ms increase in TTFB (Time to First Byte) reduces conversion rates by 7%. For a VPS-hosted application, TTFB is influenced by network routing, server processing time, and caching configuration. This article walks through measuring each component of TTFB, optimizing the origin server, deploying a CDN, and configuring edge caching with real-world benchmarks.
What TTFB Actually Measures
TTFB breaks down into three measurable components:
| Component | Description | Typical Range (VPS) | Optimization Lever |
|---|---|---|---|
| DNS resolution | Time to resolve hostname to IP | 10–50 ms | DNS caching, faster resolver |
| TCP connection + TLS handshake | Time to establish TCP and TLS | 30–150 ms | TLS 1.3, session resumption |
| Server processing time | Time for application to generate response | 50–500 ms | Opcode caching, DB tuning, keep-alive |
The sum of these three is your TTFB. A good target for a VPS-hosted site is under 200 ms for cacheable pages and under 500 ms for dynamic pages.
Measuring TTFB Accurately
Use curl with timing variables to separate each component:
# Measure TTFB components
curl -o /dev/null -s -w "\nDNS: %{time_namelookup}s\nTCP: %{time_connect}s\nTLS: %{time_appconnect}s\nServer: %{time_starttransfer}s\nTotal: %{time_total}s\n" https://your-vps-site.com
Run this from multiple locations using a service like check-host.net or catchpoint.com. A single measurement from your local machine tells you only your own path latency. You need measurements from at least 5 geographically distributed points to understand your real user experience.
Optimizing Origin Server TTFB
1. Enable HTTP/2 and TLS 1.3
HTTP/2 multiplexes multiple requests over a single TCP connection, eliminating head-of-line blocking. TLS 1.3 reduces the TLS handshake to one round trip (0-RTT for returning visitors). Together, they can cut connection setup time by 40–60%.
# Nginx configuration
server {
listen 443 ssl http2;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}
2. Configure PHP-FPM (or Application Server) for Fast Processing
For PHP-based applications, PHP-FPM settings directly impact server processing time. The default pool settings are designed for shared hosting, not a dedicated VPS:
# /etc/php/8.3/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 12
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500
# For a 2 GB VPS running WordPress, these values support
# ~50 concurrent requests without swapping
3. Enable Opcode Caching
PHP OPcache eliminates the parse-and-compile step for every PHP request. On a WordPress site, enabling OPcache with the following settings reduces server processing time from ~200 ms to ~50 ms for cacheable pages:
# /etc/php/8.3/cli/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
CDN Deployment: Measuring the Impact
A CDN reduces TTFB by terminating the TCP/TLS connection closer to the user and serving cached static assets from edge nodes. Here is a before-and-after comparison from a real VPS (2 GB RAM, DigitalOcean, WordPress site, test from 5 locations):
| Location | Without CDN (TTFB) | With CDN (TTFB) | Improvement |
|---|---|---|---|
| New York | 85 ms | 22 ms | 74% |
| London | 112 ms | 18 ms | 84% |
| Singapore | 285 ms | 45 ms | 84% |
| Sydney | 310 ms | 52 ms | 83% |
| São Paulo | 340 ms | 48 ms | 86% |
The CDN reduced TTFB by 74–86% across all locations. The biggest gains were in regions geographically distant from the origin VPS. For a VPS with a single location, a CDN is the single most impactful latency reduction you can make.
Edge Caching Configuration
Edge caching allows the CDN to serve cached HTML pages directly from the edge node, bypassing the origin server entirely. This reduces TTFB to near-zero for cacheable pages and reduces load on your VPS.
Cache-Control Headers
Set appropriate Cache-Control headers on your origin server so the CDN knows what to cache and for how long:
# Nginx: Cache static assets for 30 days
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# Nginx: Cache HTML pages for 5 minutes (adjust based on content freshness)
location / {
# ... your proxy config ...
add_header Cache-Control "public, s-maxage=300, max-age=60";
}
Purge Strategy
On a dynamic site (e.g., WordPress), you need to purge cached pages when content changes. Most CDN providers offer an API for this. For WordPress, plugins like WP Rocket or a custom hook can trigger cache purges on post publish:
# Example: Purge Cloudflare cache on post publish (via wp-cli)
wp shell <<< '\
add_action("publish_post", function($post_id) {\
$ch = curl_init("https://api.cloudflare.com/client/v4/zones/YOUR_ZONE/purge_cache");\
curl_setopt($ch, CURLOPT_HTTPHEADER, [\
"Authorization: Bearer YOUR_API_TOKEN",\
"Content-Type: application/json"\
]);\
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([\
"files" => [get_permalink($post_id)]\
]));\
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\
curl_exec($ch);\
});'
Server-Level Optimizations That Reduce TTFB
Beyond the CDN, tune your VPS kernel and web server for lower latency:
- TCP BBR congestion control: Enables faster data transfer over high-latency links. Configure with
net.core.default_qdisc=fqandnet.ipv4.tcp_congestion_control=bbr. - Nginx keepalive: Set
keepalive_requests 1000andkeepalive_timeout 65to reuse connections for multiple requests, reducing TCP handshake overhead. - gzip/Brotli compression: Compress HTML, CSS, and JS before sending. Brotli at level 5 compresses ~15% better than gzip at the same CPU cost.
- Disable server-side includes and SSI parsing if not needed — each SSI directive adds processing time.
Benchmarking Workflow
Follow this workflow to measure and improve TTFB systematically:
- Measure baseline from 5+ locations using curl timing variables or a service like Geekflare.
- Enable HTTP/2 and TLS 1.3 on your web server. Remeasure.
- Optimize application server (PHP-FPM, Node.js, etc.) — tune worker counts, enable opcode cache. Remeasure.
- Deploy a CDN (Cloudflare, BunnyCDN, Fastly). Configure edge caching for static assets. Remeasure.
- Enable edge caching for HTML with appropriate Cache-Control headers. Remeasure.
- Fine-tune kernel parameters (TCP BBR, keepalive). Remeasure.
Each step should produce a measurable improvement. If a change does not reduce TTFB by at least 5%, revert it — unnecessary complexity adds maintenance burden without benefit.
For more on optimizing your VPS environment, browse our performance tuning guides. And if you are choosing a new VPS provider, compare plans with suitable network specs to ensure your origin server is well-connected to major internet exchanges.


Leave a Reply
You must be logged in to post a comment.