WordPress 7.0 is running 10% slower on TTFB than 6.9

Data center server racks with cabling illustrating WordPress core performance infrastructure

WordPress 7.0 is close, and the performance team’s latest numbers are not comfortable reading if you track WordPress Core Performance. Time to First Byte is running about 10% worse than 6.9. LCP looks steady, which puts the extra cost on the PHP side, and the core team is still working out where exactly it goes.

As I noted while testing the Presence API, 7.0 carries a lot of new machinery. Shipping features without paying for them in cycles has never been easy in core, so it is worth knowing where those cycles go before this reaches production.

Where the 10% goes

Core contributors flagged the 10% TTFB hit in benchmarking. TTFB-LCP does not show the same regression, so the problem sits in server-side execution. My first suspects in that situation are a bloated bootstrap phase or inefficient metadata handling, occasionally a race condition in a new hook. On a busy WooCommerce site, 10% more TTFB shows up in the bounce rate.

Ticket #65165 covers script modules that depend on classic scripts. Dynamic imports help WordPress Core Performance because they do not block, but the dependency logic has to stay cheap. Resolve those dependencies with extra database queries or heavy PHP during the head render and you hand back whatever the non-blocking load saved you.

Preload headers and Nginx 502s

Part of the chat covered where <link rel="preload"> tags actually land. Appending them late in the <head> does nothing once the server has already flushed the first chunk of HTML. HTTP Link headers are the workaround the core team and plenty of developers use, since they reach the browser before the HTML starts downloading.

The catch shows up when you preload too much. A long Link header can run past the Nginx proxy_buffer_size or fastcgi_buffer_size, and Nginx answers with a 502 Bad Gateway instead of a page. I have seen it on client sites where a performance plugin decided to preload 50 or more images at once.

// Concept: Check header size before sending Link preloads
function bbioon_safe_preload_header( $header_content ) {
    $max_header_size = 4096; // 4KB is a common safe limit
    if ( strlen( $header_content ) < $max_header_size ) {
        header( "Link: " . $header_content );
    } else {
        error_log( "WordPress Core Performance: Preload header too large, skipping push." );
    }
}

Polling and real-time collaboration

Ticket #64696 looks at HTTP polling for real-time collaboration. Left unchecked, constant polling will tear through a persistent post cache. It is the same family of problem as when RC1 was delayed for performance reasons. Background polling must not trigger an expensive object cache invalidation on every heartbeat.

If WordPress core performance work is eating your dev hours, hand it over. I have been working with WordPress since the 4.x days.

What to do before 7.0 lands

7.0 is in the freeze period, so nothing new goes in and the remaining work is fixes for regressions like this one. If TTFB matters to your site, benchmark your own stack against the 7.0 RC builds now. Finding out at general release that your Nginx config chokes on the new core headers, or that PHP processing time jumped 10%, is a worse day.

author avatar
Ahmad Wael
I'm a WordPress and WooCommerce developer with 15+ years of experience building custom e-commerce solutions and plugins. I specialize in PHP development, following WordPress coding standards to deliver clean, maintainable code. Currently, I'm exploring AI and e-commerce by building multi-agent systems and SaaS products that integrate technologies like Google Gemini API with WordPress platforms, approaching every project with a commitment to performance, security, and exceptional user experience.