The memory-mapped cache: zero-copy serving from nginx
How mod_pagespeed 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 — the module and the optimizer worker.
How mod_pagespeed shares one memory-mapped cache between nginx and the worker: large hits zero-copy via sendfile, small ones with a single copy.
Read post →mod_pagespeed 2.8.0 fixes a large number of security issues; update recommended. New nginx module packages for Ubuntu 26.04 and nginx.org's nginx.
Read post →Dozens of open issues in the archived mod_pagespeed and ngx_pagespeed trackers are resolved in current mod_pagespeed. Each is listed with its fix.
Read post →A log-only systemd soak cannot see calls your filter subtracts, or a call that fires less often than the soak runs. Headless Chrome hit both.
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 →We asked 150 AI crawler operators for their Web Bot Auth key directory on 19 October 2026. 55 served one. The script, the data, and what to do with it.
Read post →HTTP Archive, September 2026: 99.9% of PageSpeed origins that report a version run a release from 2020 or earlier. The queries are public.
Read post →Chrome 155 and Firefox 158 now send image/jxl on desktop and Android. What that does to a cache keyed on Accept, and four curl commands to check yours.
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 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 worker serves a markdown variant on Accept: text/markdown and builds /llms.txt from your sitemap. Experimental, off by default.
Read post →mod_pagespeed 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 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.
Read post →Headless LCP and CLS measurement in mod_pagespeed: the optimizer worker's PerformanceObservers capture the LCP element and shifts to drive preloads.
Read post →How the mod_pagespeed 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 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 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 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, 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 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 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 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 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: the optimizer worker traces logos and icons with VTracer, collapsing the variant matrix into one.
Read post →How the mod_pagespeed 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 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), 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 is the maintained continuation. Here is how the paths compare.
Read post →Run the mod_pagespeed 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 upgrade path.
Read post →How the mod_pagespeed 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 stays flat. Break-even is ~100 to 170K requests/mo. The 2026 cost model.
Read post →How mod_pagespeed reads Save-Data to serve lighter image variants: a further 24-45% cut on top of format and viewport sizing, at the shipped defaults.
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 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.