Performance

How we migrated an ecommerce platform to HTTP/3 and cut page load times by 47%

Binadit Tech Team · Jun 03, 2026 · 7 min czytaj
How we migrated an ecommerce platform to HTTP/3 and cut page load times by 47%

The situation: a growing fashion retailer hitting HTTP limits

We worked with a European fashion retailer processing €2.8 million in monthly revenue through their WooCommerce platform. During peak shopping periods, especially evening hours and weekend sales, their site would slow to a crawl. Checkout abandonment spiked to 31% during these periods, compared to their baseline of 18%.

The company had grown from handling 500 concurrent users to over 2,400 during peak periods. Their infrastructure had scaled vertically and horizontally, but something fundamental was wrong. Page load times that stayed under 2.1 seconds during off-peak hours would balloon to 8-12 seconds during traffic spikes.

Their existing setup used Nginx load balancers in front of multiple application servers, with Redis for session storage and a well-optimized MySQL cluster. The architecture looked sound on paper, but the numbers told a different story.

Peak traffic patterns showed the real problem: users were loading product pages with 47 individual assets on average. Each page required dozens of separate HTTP connections. Under HTTP/1.1, this created a massive bottleneck that no amount of server scaling could fix.

What we found during the audit

Our infrastructure audit revealed several critical issues with their existing ecommerce infrastructure. The load balancers were correctly distributing traffic, but the HTTP protocol itself had become the constraint.

HTTP/1.1 allows only 6-8 concurrent connections per domain in most browsers. For a typical product page with 47 assets, this meant connections were queuing. We measured head-of-line blocking delays of 1.2-3.4 seconds during peak periods. CSS files would block JavaScript loading, which blocked image rendering.

The Redis configuration was optimized, database queries were fast, and server response times averaged 180ms. But total page load times reached 8+ seconds because of protocol-level bottlenecks.

We also discovered that their existing load balancer configuration was terminating SSL connections and re-establishing them to backend servers. This added an extra 40-80ms latency per request, multiplied across dozens of assets per page.

Connection reuse statistics showed the real impact. Under HTTP/1.1, each page load required establishing 12-15 separate TCP connections. During peak traffic, connection establishment time alone added 800ms to page loads.

The infrastructure monitoring showed CPU usage staying reasonable on all servers, but network connection pools were constantly maxed out. This wasn't a capacity problem. It was an efficiency problem.

The approach we took and why

Rather than continue scaling horizontally, we decided to upgrade the protocol layer. HTTP/2 and HTTP/3 solve head-of-line blocking through multiplexing and parallel streams. Multiple requests can share single connections, eliminating the connection queue bottleneck.

HTTP/2 uses binary framing and stream multiplexing over TCP. A single connection can handle dozens of concurrent requests without blocking. HTTP/3 goes further by running over QUIC instead of TCP, eliminating head-of-line blocking at the transport layer as well.

We planned a staged migration: first HTTP/2, then HTTP/3. This approach would let us measure improvements at each step and avoid the complexity of jumping directly to HTTP/3.

The load balancer upgrade required careful planning. We needed to maintain compatibility with older clients while enabling newer protocols for supported browsers. The goal was transparent protocol negotiation without breaking existing functionality.

We also planned to optimize asset delivery for the new protocols. HTTP/2 and HTTP/3 change the optimal patterns for bundling CSS and JavaScript. Domain sharding becomes counterproductive when multiplexing works better with fewer domains.

Implementation details with specifics

We upgraded their Nginx load balancers to version 1.25.1 and enabled HTTP/2 with specific tuning for their traffic patterns. The configuration focused on optimizing stream concurrency and buffer sizes for their asset-heavy pages.

Key Nginx HTTP/2 configuration changes:

http2_max_concurrent_streams 256;
http2_chunk_size 8k;
http2_body_preread_size 64k;
http2_idle_timeout 60s;

We increased concurrent streams from the default 128 to 256 because their pages averaged 47 assets. The chunk size was reduced to 8k to improve multiplexing efficiency for smaller assets like icons and thumbnails.

For HTTP/3, we compiled Nginx with BoringSSL support and enabled QUIC:

listen 443 quic reuseport;
http3 on;
http3_hq on;
add_header Alt-Svc 'h3=":443"; ma=86400';

The Alt-Svc header tells browsers that HTTP/3 is available. Browsers can then upgrade subsequent requests to use QUIC instead of TCP.

We also reconfigured their asset delivery strategy. Under HTTP/1.1, they had been concatenating CSS and JavaScript files to reduce request counts. With HTTP/2 multiplexing, this actually hurts performance because it prevents selective loading and caching.

We split their monolithic CSS bundle into 6 smaller files based on page type and functionality. JavaScript was similarly split into critical and non-critical modules. This allowed browsers to start rendering while non-essential assets loaded in parallel streams.

SSL certificate configuration required updating to support the new protocols while maintaining compatibility. We deployed certificates with proper ALPN negotiation for protocol selection.

Results with real numbers

The HTTP/2 migration delivered immediate improvements. Average page load times during peak traffic dropped from 8.2 seconds to 4.8 seconds, a 41% improvement. More importantly, 95th percentile load times dropped from 12.3 seconds to 6.4 seconds.

Checkout abandonment rates during peak periods fell from 31% to 23%, still higher than off-peak but dramatically better than before. We estimated this change alone was worth €47,000 in additional monthly revenue.

The HTTP/3 rollout delivered additional gains. Final page load times averaged 4.3 seconds during peak traffic, representing a 47% total improvement from the original HTTP/1.1 baseline. Connection establishment time dropped to nearly zero for repeat visitors due to QUIC's connection migration features.

Server resource utilization also improved significantly. CPU usage on load balancers decreased by 18% despite handling the same traffic volume. Memory usage for connection tracking dropped by 28% because fewer individual connections were required.

Network efficiency metrics showed the clearest improvement. Total bytes transferred remained the same, but connection count per page load dropped from an average of 14 connections to just 2.1 connections. This reduction in connection overhead improved performance across their entire infrastructure.

Time to first byte (TTFB) improved from 340ms average to 280ms average. While this seems modest, the improvement cascaded through all subsequent asset loads due to better connection reuse.

What we'd do differently next time

If we repeated this migration, we would implement HTTP/3 push priorities more aggressively from the start. We were conservative about server push because of mixed browser support, but the browsers that do support it showed measurably better performance.

The asset bundling optimization took longer than expected. We would plan more time upfront to properly analyze which assets benefit from bundling versus separate loading under HTTP/2. The optimal strategy varies significantly based on caching patterns and user behavior.

We would also implement more granular monitoring earlier in the process. Protocol-level metrics like stream utilization and connection reuse patterns proved crucial for optimization, but our initial monitoring focused on traditional HTTP metrics.

Connection coalescing could have been implemented more effectively. We discovered that multiple subdomains were preventing optimal connection reuse even under HTTP/2. Consolidating to a single domain for static assets would have delivered additional performance gains.

The zero downtime migration approach we used worked well, but we would build in more time for A/B testing different protocol configurations before full rollout.

Finally, we would coordinate the protocol upgrade with their CDN provider earlier in the process. The CDN was already supporting HTTP/2, but optimizing the origin-to-CDN connection for HTTP/2 multiplexing required additional configuration that we addressed later.

How protocol upgrades transform ecommerce infrastructure

This migration demonstrated that ecommerce infrastructure performance often hits protocol-level limits before server capacity limits. Traditional scaling approaches focus on adding servers or optimizing database queries, but connection management becomes the real bottleneck for asset-heavy sites.

HTTP/2 and HTTP/3 change fundamental assumptions about optimal asset delivery. Techniques like domain sharding and aggressive file concatenation that improved HTTP/1.1 performance actually hurt performance under newer protocols.

The business impact was immediate and measurable. Faster page loads directly translated to lower abandonment rates and higher conversion. For ecommerce platforms, protocol optimization often delivers better ROI than traditional infrastructure scaling.

Load balancer configuration becomes more critical under HTTP/2 and HTTP/3. The load balancer must efficiently handle multiplexed streams and connection migration while maintaining session affinity where needed.

Modern browsers increasingly default to HTTP/2 when available, making protocol support essential rather than optional. Sites that don't support newer protocols are at a measurable disadvantage during peak traffic periods.

The upgrade also positioned their infrastructure for future growth. HTTP/3's connection migration features will become increasingly valuable as their mobile traffic grows and users move between networks.

Facing a similar challenge? Tell us about your setup and we will outline an approach.