Description
From the 2026-07-05 performance & architecture review (client-side web vitals section, items 1/2/4).
Three direct Core Web Vitals wins that the server can deliver, since it already knows every slot's configured formats:
- Defer the main tsjs bundle. It is a synchronous parser-blocking script prepended at the very start of
<head> (tsjs.rs:13-18), ahead of the publisher's CSS and preloads, plus 7.3 KB of inline GPT bootstrap per page. Inline only the few hundred order-sensitive bytes (googletag stub, cmd patch, script guards) and defer the rest; audit which integrations genuinely need to be parser-blocking.
- CLS min-height injection. No CLS protection today despite the server knowing every slot's formats: inject a
<style> block at head-open with per-slot min-height from the smallest configured format. Server-side injection applies before first paint; a guaranteed-CLS fix that costs a few lines.
disableInitialLoad() to kill the double GAM request. Reused publisher-owned slots fire twice (request without hb_*, then TS refresh with it): visible creative replacement plus ~2x GAM request volume. Queue disableInitialLoad() from the head bootstrap, which runs before the publisher's GPT setup.
Effort / expected effect
- Effort: Small each
- Expected effect: Direct CWV wins; removes double GAM requests.
Sequencing item 8 of 10.
Description
From the 2026-07-05 performance & architecture review (client-side web vitals section, items 1/2/4).
Three direct Core Web Vitals wins that the server can deliver, since it already knows every slot's configured formats:
<head>(tsjs.rs:13-18), ahead of the publisher's CSS and preloads, plus 7.3 KB of inline GPT bootstrap per page. Inline only the few hundred order-sensitive bytes (googletag stub, cmd patch, script guards) anddeferthe rest; audit which integrations genuinely need to be parser-blocking.<style>block at head-open with per-slotmin-heightfrom the smallest configured format. Server-side injection applies before first paint; a guaranteed-CLS fix that costs a few lines.disableInitialLoad()to kill the double GAM request. Reused publisher-owned slots fire twice (request withouthb_*, then TS refresh with it): visible creative replacement plus ~2x GAM request volume. QueuedisableInitialLoad()from the head bootstrap, which runs before the publisher's GPT setup.Effort / expected effect
Sequencing item 8 of 10.