The memory-mapped cache: zero-copy serving from nginx
How mod_pagespeed 2.1 shares one memory-mapped cache between nginx and the worker: large hits zero-copy via sendfile, small ones with a single copy.
Read post →Technical insights on web performance, automatic optimization, and the engineering behind mod_pagespeed 2.1 — the module and the optimizer worker.
How mod_pagespeed 2.1 shares one memory-mapped cache between nginx and the worker: large hits zero-copy via sendfile, small ones with a single copy.
Read post →Is mod_pagespeed safe? It rewrites your HTML, CSS, JS and images: how its rewrites are checked, and what happens when a check fails.
Read post →HTTP Archive data on the PageSpeed installed base in 2026: adoption since 2020, versions, servers, networks, and what no longer receives fixes.
Read post →How Cyclone became an LLM KV-cache offload tier: eight rounds against LMDB and file-per-block, from 0.06 GB/s cold reads to ahead of LMDB.
Read post →The mod_pagespeed lineage and the ModPageSpeed 2.0 engine converge into one open-source product: the module you know plus an optimizer worker. Apache-2.0.
Read post →Cache benchmark: Cyclone (memory-mapped, in-process RAM tier) vs the classic file-per-entry cache, across concurrency, traffic, latency tails and eviction.
Read post →The agentic web creates four origin problems: identity, economics, what to serve, provenance. Where to solve them, and why on your own servers.
Read post →mod_pagespeed 2.1 ships an experimental, off-by-default RSL-CAP gate for nginx: check License capability tokens and refuse unauthorized AI crawlers.
Read post →mod_pagespeed detects C2PA Content Credentials manifests and keeps image provenance instead of stripping it when optimizing. On by default in both parts.
Read post →The mod_pagespeed 2.1 worker serves a markdown variant on Accept: text/markdown and builds /llms.txt from your sitemap. Experimental, off by default.
Read post →mod_pagespeed 2.1 ships an nginx Web Bot Auth verifier: it checks RFC 9421 signatures and labels requests in $x_verified_bot. Observe-only, off by default.
Read post →SSRF protection for headless rendering: the optimizer worker forces Chrome offline and routes subresources via an IP-pinned fetch, checked per redirect.
Read post →Strip tracking parameters to stop cache fragmentation: mod_pagespeed 2.1 normalizes URLs before keying, drops UTM params, sorts the query, aliases hosts.
Read post →Default cache TTL with no Cache-Control: per-content-type heuristic TTLs, RFC 9111 Age adjustment and the shared-vs-private split in mod_pagespeed 2.1.
Read post →Headless LCP and CLS measurement in mod_pagespeed 2.1: the optimizer worker's PerformanceObservers capture the LCP element and shifts to drive preloads.
Read post →How the mod_pagespeed 2.1 worker warms hot URLs: nginx flags a hot URL and the worker pre-builds the whole image variant matrix instead of one per request.
Read post →A headless Chrome V8 coverage pass measures which JavaScript runs before first paint, so the mod_pagespeed 2.1 worker can defer the scripts that never run.
Read post →Safe JavaScript minification means parsing, not stripping whitespace: semicolon insertion, regex-vs-divide and a fail-safe that ships the original as is.
Read post →How to serve markdown to AI crawlers on the same URL via Accept: text/markdown, synthesize /llms.txt from the sitemap, and honor AI opt-out directives.
Read post →How a proxy generates server-injected resource hints: speculation-rules prefetch derived from real traffic, priority-bucketed preconnect, font preload.
Read post →How mod_pagespeed 2.1 scores encoded images against a SSIMULACRA2 target in the optimizer worker and re-encodes until the result clears tolerance.
Read post →How cache key derivation in mod_pagespeed 2.1 hashes host plus URL into one key and scores stored variants in one selector pass instead of probing keys.
Read post →Why must-revalidate, not max-age, is the real safety net in mod_pagespeed 2.1, and when aggressive TTLs with stale-if-error are the right call.
Read post →When a 304 ETag round-trip beats PURGE and keeps optimized AVIF and WebP variants on an HTML-only deploy with no rebuild.
Read post →How critical CSS extraction works without a build step: the original beacon model, why CDNs broke it, and how 2.0 moved to heuristics + headless Chrome.
Read post →How mod_pagespeed 2.1 feeds the Chrome Coverage API critical CSS: the worker inlines cached stylesheets into a network-blocked sandbox to see real usage.
Read post →mod_pagespeed 2.1 keeps optimization off the nginx request path: a small notification to the worker, no reply, so a cache miss stays cheap and none waits.
Read post →Why flattening CSS @import rules is harder than concatenation: media intersection, @charset aborts, url() rebasing, and the CssFlattenMaxBytes cap.
Read post →Content-aware image optimization classifies each image and denoises noisy sources before encoding, so photos, screenshots and logos get the right codec.
Read post →Does mod_pagespeed break a strict Content-Security-Policy? Where rewriting collides with a CSP, feature by feature, and how HonorCsp keeps pages compliant.
Read post →How the mod_pagespeed 2.1 worker precomputes 103 Early Hints preloads that nginx serves from cache, stored under reserved sentinel keys beside each URL.
Read post →Purging one URL in mod_pagespeed 2.1 touches more than one cache entry: the fan-out problem, the 1.x lookup-time design, and why the worker deletes now.
Read post →Raster to SVG auto-vectorization in mod_pagespeed 2.1: the optimizer worker traces logos and icons with VTracer, collapsing the variant matrix into one.
Read post →How the mod_pagespeed 2.1 worker hashes a page template so critical CSS is computed once and reused across every URL sharing it, with queue dedup.
Read post →The mod_pagespeed 2.1 worker pixel-diffs the rendered above-fold before caching a headless critical-CSS variant; if it looks different, it is discarded.
Read post →How a WordPress server-side page cache plugin sets Cache-Control on anonymous pages and purges the mod_pagespeed cache on publish, not caching in PHP.
Read post →The Search Console AI performance report measures your visibility in AI Overviews and AI Mode, not how fast your pages load. The difference, explained.
Read post →AVIF beats WebP on size but is slower to encode. Serve AVIF, WebP or the original per request off the Accept header instead of one format for everyone.
Read post →One perception-based quality knob: a trained model predicts JPEG, WebP and AVIF encoding parameters per image in microseconds. No per-codec tuning.
Read post →A native nginx module that transcodes images to WebP and AVIF on serve, negotiates on Accept and caches the variant. Signed apt/yum packages, no compiling.
Read post →Why upstream ngx_pagespeed won't compile on nginx 1.25+ (sys_siglist, glibc, OpenSSL 3, toolchain drift) — and the prebuilt module to install instead.
Read post →Reduce TTFB on nginx: split origin compute, network, and cache, then fix keep-alive, HTTP/2 or HTTP/3, TLS resumption, and variant-aware caching.
Read post →Image SaaS bills per transformation and per GB of egress. Self-hosted optimization transcodes WebP/AVIF on your servers: no per-transformation cost.
Read post →A content hash in a .pagespeed. URL gives year-long caching with automatic cache busting, years before webpack contenthash. Plus data-pagespeed-url-hash.
Read post →40% of the top 1,000 sites serve almost nothing to non-JavaScript AI crawlers: ChatGPT, Perplexity and Claude see an empty page. The data, and the fix.
Read post →Serve WebP and AVIF from ASP.NET Core with no controller or Razor changes: WeAmp.PageSpeed middleware negotiates on Accept, sizes images, preloads LCP.
Read post →How to fix INP on ASP.NET Core: Razor + jQuery responds well to bundling and the WeAmp.PageSpeed middleware; Blazor Server INP is architectural (WASM).
Read post →The dl-ssl.google.com mod_pagespeed .deb is the last stable build, 1.13.35.2 (2018), with years of unpatched CVEs. Get the maintained download instead.
Read post →Yes, mod_pagespeed 1.13.35.2 is deprecated: the binaries run but have had no security updates in years. What to use on Apache, nginx, IIS and ASP.NET Core.
Read post →A working docker-compose.yml for ModPageSpeed 2.0 on nginx: worker + interceptor + shared Cyclone cache volume. Verify with curl, done.
Read post →Extract and inline critical CSS at the nginx layer for any backend: PHP, Rails, Django, ASP.NET, Go. No WordPress plugin, headless browser or Node build.
Read post →How to fix CLS on ASP.NET Core: pre-size async view components, persist image dimensions, reserve banner space, rewrite img tags via middleware.
Read post →Fix LCP on ASP.NET Core: async view components, immutable cache headers, deferred JS and the WeAmp.PageSpeed middleware, for Razor Pages, MVC and Blazor.
Read post →mod_pagespeed 1.15 ships 765 merges since 1.13.35.2: image-decoder hardening, a full sanitizer matrix, current dependencies and the IIS port in the tree.
Read post →How to fix INP on nginx, CMS-agnostic. Server-layer JS minification helps if your JS is bloated; if your stack is already lean, the wins are upstream.
Read post →Fix CLS on nginx sites: add width and height to img tags with ngx_pagespeed (mod_pagespeed 2.1), add a CSS aspect-ratio backstop, set sizes at build.
Read post →How to fix LCP on nginx: HTTP/2, gzip_static, TLS resumption and the mod_pagespeed rewriter. Stack-agnostic LCP fixes that work behind any backend.
Read post →INP on Magento 2 lives in KnockoutJS and RequireJS, so theme architecture (Hyvä) moves it, not a server rewriter. What mod_pagespeed can and cannot do.
Read post →Fix CLS on Magento 2 product pages: stop Fotorama gallery jumps, pre-size the mini-cart and private-content blocks, write img dimensions at the server.
Read post →How to fix LCP on Magento: tame the RequireJS waterfall, regenerate catalog images, inline critical CSS at the server. Step-by-step for Magento 2 in 2026.
Read post →How to fix INP on WooCommerce: server-layer JS minification reduces the parse cost, but cart and variation handlers are architectural.
Read post →How to fix CLS on WooCommerce: stop the gallery shift, lock variation swap dimensions, reserve cross-sell space, and rewrite img tags at the server.
Read post →Fix LCP on WooCommerce: shrink the product gallery, drop cart-fragments on non-shop pages, and rewrite catalog images at the server with mod_pagespeed.
Read post →How to fix INP on WordPress: diagnose the responsible interaction, defer non-critical JS at the server layer, then trim plugin handlers and jQuery.
Read post →How to fix CLS on WordPress: diagnose the shifts, set width/height on every image at the server layer, lock down fonts, reserve banner space.
Read post →How to fix LCP on WordPress: diagnose the hero, inline critical CSS at the server, convert JPEG to WebP, and verify in Search Console. Step-by-step, 2026.
Read post →Google mod_pagespeed and ngx_pagespeed are no longer actively developed. mod_pagespeed 2.1 is the maintained continuation. Here is how the paths compare.
Read post →Run the mod_pagespeed 2.1 optimization pipeline as ASP.NET Core middleware from NuGet: image transcoding, critical CSS and cache serving in 2 lines of C#.
Read post →Migrating from the archived mod_pagespeed 1.13.x or ngx_pagespeed: directive mapping, image-format checks, a verification checklist, and the 2.1 path.
Read post →How the mod_pagespeed 2.1 optimizer worker inlines critical CSS two ways: static heuristics in under 5ms per page, or an optional headless-Chrome path.
Read post →Image CDNs run $35 to $3,500/mo as traffic grows; self-hosted mod_pagespeed 2.1 stays flat. Break-even is ~100 to 170K requests/mo. The 2026 cost model.
Read post →How mod_pagespeed 2.1 reads the Save-Data request header to serve lighter image variants: a 30-50% bandwidth cut on top of format and viewport sizing.
Read post →Measured ModPageSpeed 2.0 results on e-commerce, blog, news and portfolio sites: WebP/AVIF savings and LCP, FCP, CLS and Lighthouse gains, 3G to broadband.
Read post →Serve WebP and AVIF automatically on nginx, self-hosted. The mod_pagespeed 2.1 worker decodes each image once and builds up to 37 responsive variants.
Read post →The story behind ModPageSpeed 2.0: why mod_pagespeed stopped being developed, what was kept from PSOL, and how a new architecture replaced RewriteDriver.
Read post →// Quick message
Sent — thanks.
We read every message.