Migration into Free, LiteSpeed cache ownership & accurate hit counting.
Migration:
– New: One-click migration from other caching plugins (LiteSpeed Cache, WP Rocket, W3 Total Cache, etc.) is now part of the Free plugin — import your existing exclusions and settings on activation instead of starting from scratch.
LiteSpeed:
– Fixed: On LiteSpeed/OpenLiteSpeed, xSpeed now tells LSCache to stand down (X-LiteSpeed-Cache-Control: no-cache) and owns the cache itself, so the X-XSpeed-Cache header is emitted, hits are counted, and the dashboard no longer falsely reports a PHP fallback.
– Fixed: LiteSpeed cache hits route through the drop-in (which both tags and counts them) since OpenLiteSpeed’s .htaccess can’t tag or log a static hit — giving consistent ~1ms hits and an accurate hit ratio.
Cache hit counting & stats:
– Fixed: Hit/miss counters moved off transients onto a persistent option, so they no longer evaporate when a non-persistent object cache (e.g. an unreachable Redis) is active — the hit ratio was getting stuck at a fake 0%/100%.
– Fixed: Cache MISSes are now recorded inline so the hit-ratio stat reflects reality instead of being pinned at 100%.
– Fixed: PHP-served cache HITs are counted correctly and the drop-in device-bucket desync is resolved.
– Fixed: Homepage now caches via the static rewrite (the rule used a pattern that required a non-empty path, so / fell through to PHP while inner pages were rewritten).
Nginx:
– Fixed: A nginx access_log directive in the generated snippet could take down the whole server when its log file was missing; the path is now resolved lazily so a deleted hits.log can’t fail nginx -t.
– Fixed: The dashboard’s nginx server-block snippet now updates optimistically when you toggle cache, instead of showing the pre-toggle state, and the wizard’s Done step shows the post-apply block.
Admin UX:
– New: Collapsible sidebar groups for cleaner navigation.
– Improved: Renamed the “Cache” module label to “Page Cache” for clarity.
– Improved: Sidebar group icons and chevrons brighten correctly on hover (white in dark mode).
Module fixes:
– Fixed: Lazy Load — four correctness bugs resolved.
– Fixed: Heartbeat — editor-context detection, CLI set support, and honest frontend copy.
– Fixed: Database cleaner — expired-transient cleanup gaps and a count mismatch.
– Fixed: Google Fonts — no longer double-appends display=swap on entity-encoded hrefs.
– Fixed: Settings now strictly validate boolean fields instead of casting, preventing bad values from silently becoming true/false.
– Fixed: Object Cache — core option groups marked non-persistent so the drop-in can always be deactivated; degraded backends detected honestly.
– Improved: Static-rewrite SSL probe verifies the certificate and no longer blocks admin page loads.
One-click object cache, parity exclusions & admin polish.
Object Cache:
– New: One-click Object Cache setup for Redis and Memcached — tests the connection, installs its own drop-in, and writes the wp-config constants (fully reversible). No drop-in plugin or PHP extension required.
– Improved: Dashboard now reports a degraded object cache honestly when the drop-in can’t reach its backend, instead of implying caching is healthy.
Admin UX:
– New: WP admin submenu now mirrors the in-dashboard navigation, so the menu and dashboard tabs stay in sync.
– Improved: Settings changes apply live across dashboard navigation — no full page reload needed.
– Improved: Menu icon now recolors to the active accent state correctly.
– Improved: Success notifications are anchored to a single consistent position (bottom-center).
– Fixed: Long panel titles no longer push the subtitle off-screen.
– Fixed: Number-input spinners render consistently across browsers (Firefox no longer clips the value).
Cache exclusions:
– New: Exclusion lists now ship pre-populated with LiteSpeed / WP Rocket-parity defaults (16 URLs, 20 cookies, 28 query params), so a fresh install caches correctly out of the box.
– New: Exclusion rules now support regex via a ~ prefix (e.g. ~utm_[a-zA-Z0-9_-]+), alongside glob and substring, with ReDoS guards.
Bug fixes:
– Fixed: Browser Cache no longer emits an “Array to string conversion” warning on multi-valued Cache-Control headers (also clears a false “nginx config required” notice).
License:
– Fixed: Activating a Pro license now unlocks the Pro panels immediately — no full page reload needed.
Topology-aware UX, nginx HIT counting, admin polish.
Cache topology & UX:
– New: Topology-aware rewrite banner — the dashboard now detects containerized hosts (xclude, Kinsta, RunCloud Atomic, etc.) where the $document_root assumption doesn’t hold, and tells the user exactly what to expect on their stack instead of silently failing.
– New: Unified nginx server-block snippet — one consolidated, copy-pasteable snippet (collapsible in the UI) replaces the previous fragmented sections.
– New: Nginx-served HITs are now counted — a dedicated access_log captures cache hits served directly by nginx (no PHP), so the dashboard “HITs in last 24h” stat is accurate on nginx setups.
– New: X-XSpeed-Cache response header — cache hits are now visible in the response headers, with a distinct value per serve layer (HIT (nginx) for the fast static path, HIT (php) for the drop-in fallback) so you can confirm a page was cached and tell exactly which layer served it.
– Improved: Browser Cache notice is topology-aware and renders its snippet in a proper code block.
Admin UX:
– New: Third-party admin notices are suppressed on xSpeed admin screens (page=xspeed* only) — other plugins’ “rate us” / promo notices no longer crowd the xSpeed dashboard.
– New: Aligned sticky title-bar across the sidebar and content panels for a cleaner scroll experience.
– Improved: Browser Cache + GZIP notices probe-gate themselves — once the underlying issue is resolved, the notice dismisses on its own instead of lingering.
Benchmark:
– Fixed: “Without cache” leg of the dashboard speed test now appends a cache-buster query string. Previously it was hitting the cache and reporting an artificially-fast baseline, making the speedup number look small.
Static-rewrite cache, Site Health & Fonts.
Static-rewrite cache + Site Health:
– New: Static-file rewrite path — cached HTML is served directly by Apache / nginx / LiteSpeed, bypassing PHP entirely on cache hits (5-15ms TTFB vs ~85ms via the PHP drop-in).
– New: .htaccess static-cache block — installed automatically on cache enable, removed cleanly on disable. Block precedes WordPress’s own rules so static files match first.
– New: nginx config snippet — copy-pasteable server { } block surfaced in the dashboard when nginx is detected (PHP can’t write nginx config). Avoids the “if is evil” pitfall via a named-location fallback.
– New: LiteSpeed LSCache coexistence — xSpeed detects LSCache’s server-level module and steps back instead of double-caching.
– New: Active rewrite probe — Health module pings the cache directory and confirms the rewrite is actually serving static bytes (not just present in .htaccess).
– New: WordPress Site Health integration — Tools → Site Health now lists an xSpeed check covering static-rewrite status + nginx config requirements.
– New: Persistent banner — Cache panel warns the admin when caching is on but the static-rewrite block isn’t engaged (slow fallback path).
– New: Copy-to-clipboard button on every config-snippet panel (nginx, GZIP, object-cache).
Fonts:
– New: Fonts module — adds font-display: swap to enqueued web fonts so visible text doesn’t wait on a slow Google Fonts response, and exposes a preload list for above-the-fold font files.
– New: FontsModule tests covering the swap rewrite + preload <link> emission.
Improvements & fixes:
– Improved: Server-type detection is cached so CLI / cron contexts see the same server type as web requests.
– Improved: Drop-in (advanced-cache.php) and WP_CACHE constant are preserved across plugin upgrades; auto-heal hook tightened to admin_init to avoid REST/cron noise.
– Improved: Plugin Check pass — i18n textdomains, WP_Filesystem coverage, SQL preparation, sanitization, and plugin/readme headers all cleaned up for WordPress.org review.
– Fixed: nginx snippet rewritten to avoid the try_files trap that broke pretty permalinks.
– Fixed: Rewrite condition normalized for trailing-slash + non-trailing-slash URLs.
– Fixed: WP-Rocket-style canonical pattern — server-level conditional rewrite.
– Fixed: Minify tag-rewrite filters bail in non-frontend contexts (REST / admin / cron).
– Fixed: wp.org release zip now ships vendor/ — resolves the 1.0.1 activation fatal.
– Improved: Release pipeline rebuilt — .distignore-driven dist build, CI verify step, version-named artifact on every run.
– Improved: Plugin version read from the PHP header — single source of truth.
Foundation release — full feature set + Pro hooks.
Module architecture + LiteSpeed parity floor:
– New: Module architecture — every feature now ships as a self-contained Module (Cache, Health, Preloader, Heartbeat, Minify, GZIP, Lazy Load, Disable Bloat, Database, CDN, Cloudflare, Object Cache, Browser Cache).
– New: Health module — 24-hour hit/miss counter + activity log.
– New: Preloader module — sitemap-driven cache warmer with content-publish auto-warm.
– New: Cache exclusion intelligence — glob URL patterns, cookie patterns, User-Agent bypass, ignored query parameters.
– New: Per-device cache (mobile-separate).
– New: Per-post cache rules — don’t-cache + custom expiry meta box.
– New: Minification — CSS / JS / HTML minify, combine, defer JS, delay JS, async CSS, remove ?ver= query strings.
– New: Lazy Load module — images / iframes / videos + auto CLS-fix.
– New: Disable Bloat module — 6 ergonomic toggles (dashicons, oEmbed, RSS, XML-RPC, jQuery Migrate, REST auth).
– New: Database module — optimize tables, scheduled cleanup, autoload analysis.
– New: CDN module — pull-zone URL rewriting.
– New: Cloudflare module — zone connect, auto-purge, dev-mode toggle.
– New: Object Cache module — Redis / Memcached config + status + flush.
– New: Browser Cache module — Cache-Control + Expires headers.
– New: Settings search across the entire dashboard with keyword highlighting.
– New: 3-step setup wizard on first activation with preset chooser and benchmark.
– New: Sidebar grouping under domain headers (Cache / Performance / Network / Insights / Tools).
– New: Sidebar tooltips + search shortcut in the collapsed rail.
– New: xspeed_branding filter — agencies can rebrand the dashboard.
– New: xspeed_cache_skip_for_post + xspeed_cache_expiry_for_post filters.
Pro-essentials (everything xSpeed Pro depends on, bundled here so any Pro release works against this single Free version):
– New: xspeed_module_descriptor filter — Pro hooks this to swap its panels to LicenseLockedPanel when license is invalid.
– New: AI Privacy module — GDPR off-switch + xspeed_ai_can_collect_data filter that Pro AI features must consult before recording visitor data.
– New: Pro upsell teasers — in-context inline cards on Cache, Minify, Lazy Load, Browser Cache and Disable Bloat panels.
– New: Locked Pro module rows in the sidebar — shows what Pro offers with a clear upgrade prompt.
– New: Pro Audit on the Cache panel — site-specific scan listing the top Pro features that would help THIS site, with severity chips and concrete reasons (not generic marketing copy).
– New: Sidebar slot for the license module (appears when xSpeed Pro is installed).
– New: Global 36px form-control height baseline across the dashboard.
– New: filemtime() cache busting on admin asset URLs.
Improvements & fixes:
– Improved: React panel registry — modules auto-render in the dashboard.
– Improved: Portal-based save indicator — zero layout shift.
– Improved: Distribution zip prunes dev dependencies (composer install –no-dev).
– Fixed: 5 duplicate module icons + regression test.
Plugin Website
Visit website
Share Post
Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.