Performance Revolution: setup and help

Quick start

  1. Upload and install the ZIP in Modules > Module Manager, then open Performance > Settings.
  2. Choose Cache Backend and verify the effective Redis endpoint or another available adapter.
  3. Check Global Cache and Front Office under Cache > Overview.
  4. Review Fragment Caching, Query Cache, Asset Optimization and Images, then save the initial configuration.
  5. If using full-page caching, enable Enable Origin Page Cache and inspect Diagnostic Header on a clean anonymous URL.
  6. Request the page twice, then verify separate cart, login, account and checkout sessions bypass shared anonymous HTML.
  7. Configure CDN and scheduled warming separately if needed, and check their setup status and runner results.

Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.

Setup manual

Install and establish a baseline

Upload the ZIP in Modules > Module Manager, install it and click Configure. The back-office menu is Performance, with Dashboard, Cache, Assets, Queries, Backup, Settings and System Check.

Before enabling additional layers, record how your homepage, category, product, cart, account and checkout behave. Test in a customer browser as well as an employee browser. Select the intended shop and back up configuration before changing core caching or CDN rules.

Start in Settings > Cache Backend. The PHP process needs write access to the PrestaShop cache and generated-asset directories. The PrestaShop Redis object-cache installation also needs access to the affected core cache class and configuration files. Cloudflare actions require a token authorized for the selected zone and the requested operations.

Select the backend and cache scopes

Setting Default What you set
Cache Backend auto Select Auto, Redis, APCu or File for the module cache manager. Auto chooses an available supported backend.
Default Cache TTL 3600 seconds Default lifetime for module entries.
Redis Host 127.0.0.1 Portable module default. Existing PrestaShop Redis configuration can affect the effective endpoint; inspect its displayed source.
Redis Port 6379 Redis TCP port.
Redis Password Empty Authentication password when required.
Redis Database 0 Database index.
Redis Prefix mpr_perf: Prefix for module keys.
Redis Connect Timeout 0.25 seconds Connection timeout.
Redis Read Timeout 0.5 seconds Read timeout.
PrestaShop Object Cache (Redis) Existing core setting Separate control for PrestaShop's core object cache through MPRCacheRedis. It reads core configuration rather than a fixed module default.

Save and check the selected adapter on Dashboard. If Redis cannot connect, verify hostname, port, authentication, database and PHP Redis support. Do not assume choosing the module backend also enables the core object cache.

Open Cache > Overview for Global Cache, Front Office, Back Office and Webservice scope switches. Their module defaults are on. The global switch controls module cache usage, and scope switches restrict the corresponding request contexts.

Use Cache > Layers for layer controls, Browser to inspect entries, Pages to inspect page-cache data and Presets to review available presets. Read a preset before applying it because it changes several settings together.

Auto-detection tries Redis, then APCu, then File. If the adapter you selected is unavailable, the module runs auto-detection again, so after saving check the adapter actually in use on Dashboard. File storage needs a writable cache directory; check that cache files are being written.

Configure fragments and queries

Open Settings > Fragment Caching.

Setting Default Effect
Enable Fragment Caching On Enable explicitly marked Smarty fragments. It does not automatically wrap every theme section.
Default TTL 3600 seconds Lifetime when a fragment does not supply its own TTL.

A developer can cache a category fragment while including category identity:

{mpr_cache id="category_products" ttl=3600 tags=["product","category"] vary=["category" => $category.id]}
  {foreach from=$products item=product}
    {include file='catalog/_partials/miniatures/product.tpl' product=$product}
  {/foreach}
{/mpr_cache}

The cache key includes language, shop, currency and default customer group unless context inclusion is disabled. Add every other value that affects the fragment to vary. Do not place customer-specific markup in a shared fragment without appropriate variation or dynamic replacement.

Use dynamic placeholders for supported current-request values:

<span class="cart-count">{mpr_dynamic name="cart_count"}</span>
<span class="cart-total">{mpr_dynamic name="cart_total"}</span>
<span class="customer-name">{mpr_dynamic name="customer_name" default=""}</span>
<span class="csrf-token">{mpr_dynamic name="csrf_token"}</span>

Supported names also cover customer, language, currency and shop values. A custom provider can use actionMPRDynamicContent:

public function hookActionMPRDynamicContent($params)
{
    if (($params['name'] ?? '') === 'loyalty_points') {
        return (string) $this->getCurrentCustomerPoints();
    }
    return $params['default'] ?? '';
}

Open Settings > Query Cache.

Setting Default Effect
Enable Query Caching On Enable supported query-result caching.
SQL Request Prefetch Off Optional request prefetch mode. Leave off for the first setup; verify the selected mode against your query workload.
Enable Query Profiling Off Collect query execution timings.
Slow Query Threshold 0.1 seconds Threshold for slow-query reporting.
Query Cache TTL 300 seconds Lifetime for cached query results.

Use Queries to inspect collected queries. Enable profiling while diagnosing a problem, then review its overhead before keeping it active.

Configure assets and offline CSS

Open Settings > Asset Optimization. Enable and test one change at a time on your theme.

Setting Default Effect
Enable Asset Optimization On Master asset-processing switch.
Asset Bundling Off Replace original assets with optimized bundles.
Smart Asset Deferral Off Defer supported module assets according to page and interaction needs.
CSS Minification On Minify CSS.
JS Minification On Minify JavaScript.
Custom CSS Combiner Off Use the module combiner rather than relying only on native CCC.
Remove Unused CSS Off Removes selectors that do not appear in the collected templates and scripts. Check dynamic components afterwards.
Resource Hints On Add supported preload, prefetch, preconnect and DNS-prefetch hints.
Page-Type CSS Off Uses stylesheet variants built offline for supported page types. If a variant is missing or out of date, the complete stylesheet is used.
Generated Initial CSS Off Inline validated initial CSS produced by the offline worker. This is the current label for the older Critical CSS description.
Initial CSS Pages auto Automatically target home, main categories, top products and key CMS pages per language, or provide explicit target URLs.
Initial CSS Budget 51200 bytes Inline budget, allowed from 8192 to 51200 bytes. A page needing more keeps its complete stylesheets.
JS Idle Defer Off Load selected module JavaScript later through the idle-deferral path.
Deferred Modules None Choose module assets for idle deferral. Test interactive features that depend on them.

Enabling generated CSS does not launch a browser during a storefront request. Build it with the separate workers. Generated Initial CSS Status reports readiness. The critical-CSS worker requires Node 22.12 or later and its configured browser environment. Follow the worker's bundled instructions for generation and deployment.

These CLI commands inspect or seed its work; they do not themselves complete browser generation:

php modules/mprperformancerevolution/cli/critical-css.php --targets
php modules/mprperformancerevolution/cli/critical-css.php --seed
php modules/mprperformancerevolution/cli/critical-css.php --status
php modules/mprperformancerevolution/cli/page-type-css.php --status

Rebuild the offline CSS data after relevant stylesheet, template, script or content changes. When the generated data is missing or invalid, the module falls back to the complete stylesheets.

Configure navigation preloading and images

Open Settings > Instant Navigation.

Setting Default Effect
Load Pages Ahead On Publish supported browser speculation rules. Unsupported browsers ignore them.
What to Load Ahead Prefetch Prefetch downloads only. Prerender also renders and runs scripts before navigation, so verify every tracking integration before choosing it.
When to Start: Cached Visitors Moderate Start after a short hover.
When to Start: Other Visitors Conservative Start on click/tap to limit uncached work.
Never Load Ahead Empty Add paths or globs, one per line. Built-in private/action exclusions remain in force.

Cart, checkout, account, sign-in, query-string links, files, nofollow links and module tools are excluded by the built-in policy. The server also validates speculative requests.

Open Settings > Images.

Setting Default Effect
Lazy Loading On Add native image lazy-loading behavior where the optimizer applies.
WebP Conversion Off Generate WebP where the server supports it.
AVIF Conversion Off Generate AVIF with an available supported encoder.

Runtime AVIF encoding can use GD imageavif or Imagick with AVIF support. GD AVIF generally needs PHP 8.1 or later. Batch generation can also use the bundled Python backend when Python, Pillow, pillow_avif and process execution are available. WebP uses supported GD functionality.

Additional internal defaults apply to listing images: the image-type filter defaults off, and the type list is default_sm,default_md,default_lg,home_default,product_main,product_main_2x. These are not separate visible fields in the standard Images form. Likewise, the internal RUM sample rate is 0.1.

For a controlled batch, run from the installed shop:

php modules/mprperformancerevolution/scripts/generate-images-cli.php --quality=50 --webp-quality=80 --webp --limit=100

Use repeatable --path=PATH to restrict work within the shop root. --force regenerates existing variants. Review converted, skipped and error counts before a larger batch.

Configure the origin page cache

Open Settings > Origin Page Cache.

Setting Default Effect
Enable Origin Page Cache Off Store and serve validated anonymous HTML before normal controller execution.
Origin Page Cache TTL 86400 seconds Allowed range: 60 to 2592000 seconds.
Additional Excluded URLs Empty Add paths or globs, one per line. Built-in private-route and session exclusions remain.
Diagnostic Header On Emit X-MPR-PageCache with hit, miss or a structural bypass reason.

This is a real origin full-page cache using the module cache manager. It is separate from CDN HTML caching and Smarty fragments. Cart, account, checkout, admin, AJAX, unsafe session-cookie and unknown-query requests bypass according to the runtime policy.

Enable it only after checking a clean anonymous page and the required bypass cases. Request the same anonymous URL twice and inspect X-MPR-PageCache. Then test login, cart creation, currency/language changes and private pages in separate browser sessions.

Configure warming and scheduled tasks

Open Settings > Cache Warming.

Setting Default Effect
Enable Origin Cache Warming Off Enable scheduled origin passes.
Allow Post-deploy CLI Warm On Permit a full post-deploy CLI pass.
Concurrency 1 Concurrent origin requests.
Max Runtime 120 seconds Bound one normal pass.
URL Set all Choose Critical, Manifest, Sitemap or All.
Origin Resolve IP 127.0.0.1 Resolve the shop hostname to this origin IP for origin warming.
Recent Warm Throttle 12 hours Skip recently warmed URLs during normal passes.
Pause Between Requests 500 ms Pace requests.
Stop Above Host Load 100 percent Pause when normalized host load reaches the configured limit.
Enable Cloudflare Edge Warming Off Warm public URLs through the edge.
Edge Warm Interval 6 hours Recent-edge-warm throttle.
Warm Renders per Hour 6 Shared scheduled-render budget.
Warm Request Time per Hour 60 seconds Shared scheduled request-time budget.
Quiet Start of Each 10 Minutes 30 seconds Leave the opening part of each block for other scheduled work.

Copy the actual generated token into your server scheduler. A typical runner command is:

* * * * * php /var/www/html/modules/mprperformancerevolution/cron.php --token=YOUR_TOKEN --max-tasks=20 --max-seconds=55 --context=cron

Adjust PHP and shop paths. The runner also handles declared cleanup, pending invalidations/purges, image jobs and CSS maintenance according to task state. Enabling a feature and scheduling its task are separate checks.

A manual post-deploy pass can use:

php modules/mprperformancerevolution/cli/warm-cache.php --full --both --url-set=all --concurrency=1 --resolve-ip=127.0.0.1 --max-seconds=120

Use --edge for edge-only, --cron for cron mode and --help for supported arguments. Read the summary for disabled, failed or blocked external-write states. A paused or budget-limited pass can be expected with conservative defaults.

Monitor, debug and verify

Open Settings > Monitoring. Enable Metrics Collection defaults on, Metrics Retention to 30 days and Real User Metrics to on. The internal RUM sample rate is 10 percent. Dashboard metrics include adapter state, hits, misses, hit ratio, memory, slow queries and available TTFB, FCP, LCP, CLS and INP measurements.

Open Settings > Dev Mode to temporarily suspend cache-related settings. Dev Mode starts inactive, saves the previous configuration and restores it on deactivation or expiry. Employee Debug Mode starts off and enables PrestaShop development output only for recognized employees with the module's validated debug cookie.

Under Settings > Debug, Debug Overlay, Enable Debug Panel and Profiler Panel default off. Allowed IP Addresses and Allowed Employee IDs start empty. Profiler: Employees Only defaults on. Keep diagnostics restricted while testing and turn them off when finished.

Optional profiler files exist at optional-overrides/classes/Hook.php and optional-overrides/classes/db/Db.php. Use the guarded profiler override installation workflow so existing overrides are checked. Clear PrestaShop class/cache state as instructed by that workflow. Do not overwrite unrelated overrides with an unconditional copy. Remove optional profiler overrides through the same workflow when no longer needed.

After each configuration change, check the homepage, listing, product, cart and checkout, then confirm cache headers and bypass reasons in separate customer sessions. Catalog, stock, price and content hooks invalidate supported cache tags, but theme, integration and CDN rule changes can still need explicit cache clearing.

Stored monitoring data

Review the collected data before sharing diagnostic exports:

  • Slow queries can contain the complete SQL statement, execution time, controller, stack trace, occurrence count and first/last-seen timestamps. SQL or trace text may contain customer, cart or order identifiers, so restrict access to these diagnostics.
  • Real-user monitoring (RUM) stores the page URL, device class, connection type, available browser timings, DOM timings, resource summary, shop and timestamp. It can also record the navigation delivery type. These are diagnostics, but URLs and resource details still need review before sharing.
  • The schema also creates metric value/context and hour/day/week/month summary tables, but the current version never writes to them, so they stay empty.

The RUM aggregation path summarizes raw data older than 24 hours into hourly URL/device/shop sample counts and averages, then deletes the aggregated raw rows. This work is attempted opportunistically on a small fraction of beacon requests. Although the aggregate schema contains p75_lcp, the current executed query and insert do not calculate or populate that value. Do not describe those averages as a 75th percentile.

Troubleshoot and uninstall

If the adapter differs from your selection, inspect backend availability and Redis endpoint resolution. If a page bypasses, read its diagnostic reason before raising limits or changing cookie policy. For stale HTML, check origin and edge layers separately and confirm invalidation completed.

If bundling, deferral or CSS changes break a component, disable the affected setting, clear its generated files or cache and test again. For generated CSS, check the status and the worker log. For image errors, check encoder support and write permissions. For pending warming, check the runner, the feature switch, host load and budgets.

Before uninstalling, remove optional profiler overrides you installed and review active CDN rules. Disable or remove module-owned edge rules through the CDN workflow so the zone does not keep caching private routes without the intended origin protection. Back up configuration and generated data you need.

Uninstall removes scheduled tasks, employee debug bootstrap, the installed Redis cache class, module menu entries and module database tables. Review PrestaShop's core cache configuration and any external CDN configuration afterwards; do not assume all remote setup is undone by Module Manager.

Compatibility

Requires PrestaShop 1.6.1 or later and PHP 7.1 or later.

Questions

No questions about this module yet

Ask anything about installation, compatibility or setup. Answers appear here.

Known Issues

27

Cached pages are not reliably separated at capacity

ResolvedUpdated:
Fixed in: 1.26.9
Page cache capacity handling could fail to retain a distinct cached entry for each page.

Deleted pages still consume cache capacity

ResolvedUpdated:
Fixed in: 1.26.9
Purged pages could continue to count against cache capacity and prevent space from being reused correctly.

Cache clears can leave recently regenerated content stale

ResolvedUpdated:
Fixed in: 1.26.9
A follow-up cache purge could run too soon after a cache clear, leaving content regenerated during the clear stale.

Footer carousel fails when its startup script is delayed

ResolvedUpdated:
Fixed in: 1.26.9
The footer carousel startup could be delayed separately from its controller and fail to initialise.

Missing catalogue pages receive a shared cache policy

ResolvedUpdated:
Fixed in: 1.26.9
A catalogue request that ended as a missing page could still receive the shared caching policy for a valid listing.

Incomplete pages enter the page cache

ResolvedUpdated:
Fixed in: 1.26.9
A partially rendered page could be stored and later shown to visitors as a complete page.

Google One Tap prevents otherwise public pages from being cached

ResolvedUpdated:
Fixed in: 1.26.9
The presence of Google One Tap state could unnecessarily exclude an anonymous visitor from page caching.

Emptying a cart leaves anonymous visitors uncached

ResolvedUpdated:
Fixed in: 1.26.9
After emptying a cart, an anonymous visitor could remain excluded from page caching unnecessarily.

Deferred script bundles fail to initialise

ResolvedUpdated:
Fixed in: 1.20.1
Deferring combined scripts could separate a script from a required dependency or deliver it without the loader it needed.

Asset management page fails to open

ResolvedUpdated:
Fixed in: 1.20.1
The asset management page could fail while trying to display an unavailable purge action.

PrestaShop 9 back-office login redirect fails

ResolvedUpdated:
Fixed in: 1.18.1
Opening a protected module administration page while signed out could produce an error instead of redirecting to back-office login.

Targeted cache clearing does not resolve selected products

ResolvedUpdated:
Fixed in: 1.18.1
Clearing cache for selected catalogue items could fail to apply to the chosen items.

Group-specific prices are affected by cached missing data

ResolvedUpdated:
Fixed in: 1.18.1
Caching a missing group price could change how group pricing was calculated on later requests.

Visitor performance averages are misleading

ResolvedUpdated:
Fixed in: 1.18.1
Performance measurements could include unseen prerendered pages, and unavailable browser measurements could be counted as zero.

Filtered catalogue pages show another filter result

ResolvedUpdated:
Fixed in: 1.18.1
Different filtered page requests could share the wrong cached content instead of remaining separate.

Dynamically loaded controls lose their styling

ResolvedUpdated:
Fixed in: 1.18.1
Stylesheet cleanup could remove styles required by storefront controls that appeared after the initial page load.

Content image lightbox does not open promptly

ResolvedUpdated:
Fixed in: 1.18.1
Deferring required gallery assets could prevent content images from opening immediately in the lightbox.

Homepage hero slider starts too late

ResolvedUpdated:
Fixed in: 1.18.1
Deferring essential slider assets could delay or break the homepage hero slider.

Modern image variants are missing or outdated

ResolvedUpdated:
Fixed in: 1.18.1
Optimised AVIF and WebP images could use incorrect names or remain outdated after the original image changed.

Cache clearing misses translated catalogue pages

ResolvedUpdated:
Fixed in: 1.18.1
Clearing catalogue caches could leave stale versions of the same pages in other shop languages.

Security hardening

ResolvedUpdated:
Fixed in: 1.18.1
Security hardening.

Cache management screens fail to open or remove entries

ResolvedUpdated:
Fixed in: 1.18.1
The cache browser could fail to open, and cache management controls could fail instead of removing selected entries.

Anonymous cart contents are lost with page caching

ResolvedUpdated:
Fixed in: 1.5.8
Adding products through storefront requests could fail to persist an anonymous cart when page caching was enabled.

Dropdown menus flash open during page loading

ResolvedUpdated:
Fixed in: 1.5.8
Dropdown menus could briefly appear open before the full stylesheet finished loading.

Signed previews show cached public content

ResolvedUpdated:
Fixed in: 1.5.8
Signed preview requests could incorrectly use the public page cache instead of rendering the preview.

Lazy image optimisation damages page scripts

ResolvedUpdated:
Fixed in: 1.5.8
Image optimisation could alter inline scripts and break storefront behaviour.

Express checkout buttons stop working

ResolvedUpdated:
Fixed in: 1.5.8
Asset optimisation could remove checkout scripts from pages that still displayed express checkout buttons.

Feature Requests

17

Implemented

Scheduled origin and Cloudflare cache warming

Implemented
Scheduled tasks preload cacheable shop pages into the origin page cache and Cloudflare edge cache. Origin and edge warming can be enabled separately.

Cloudflare full-page caching

Implemented
Serve eligible public pages from Cloudflare while retaining support for PrestaShop 9 session handling.

Critical stylesheet generation

Implemented
Generate the styles needed for the initial page view to reduce rendering delays.

AVIF images and deferred assets

Implemented
Generate AVIF image variants and defer selected assets until they are needed.

Navigation prefetching

Implemented
Begin loading a linked page when a visitor points at its link.

Generated asset retention

Implemented
Keep generated assets available across cache clears.

One-click module updates

Implemented
Install available module updates from the back office.

Instant Navigation and early resource hints

Implemented
Configure page prefetching or prerendering for supported browsers and provide earlier resource loading hints.

Automatic cache warming

Implemented
Warm public pages at the shop and Cloudflare, with pacing that pauses during high load or traffic surges.

Content page caching

Implemented
Cache supported blog, knowledge base and FAQ pages.

Exceptions for deferred assets

Implemented
Choose individual files that should load immediately even when other assets are deferred.

Scheduled publication-aware cache expiry

Implemented
Expire cached pages when the next scheduled blog publication becomes due.

Public page cache for staff

Implemented
Let logged-in staff reuse eligible anonymous page-cache entries.

Data-prioritised cache warming

Implemented
Prioritise pages using human visits, search traffic and orders while sharing a controlled warming budget.

Cache miss diagnostics

Implemented
Inspect why a page is excluded from caching and which visitor state affects the decision.

Page rendering load protection

Implemented
Limit excessive public page rendering and serve a cached page or a temporary retry response while preserving shopping sessions.

Optional page data prefetching

Implemented
Enable an optional optimisation that prepares reusable page data to reduce database work during page loading.

Changelog

v1.5.152026-05-27

  • AddedFinalize performance endpoint SEO cleanup
  • AddedRetain generated assets across cache clears
  • AddedFlip CDN cache from whitelist to blacklist — cache all pages by default
  • AddedHover prefetch for perceived-instant navigation
  • AddedStrip tracking query params (srsltid, fbclid, gclid) to prevent CDN cache fragmentation
  • Addedcomplete FR/DE/ES/IT/PL translations
  • ImprovedDelay full listing stylesheet load
  • ImprovedInline critical listing render assets
  • ImprovedServe compact category intro images
  • FixedKeep listing image optimization theme-safe
  • FixedMigrate module state to MPR config
  • FixedPurge localized catalog urls
  • FixedCache knowledge base pages at edge
Older releases

v1.3.02026-04-20

  • AddedOrganize config form via getTabsDefinition() and adopt masked_key
  • AddedFix CDN cache bypass for pages with session init during rendering
  • AddedLicense management tab with key management and renewal options
  • Addedself-healing integrity checks for automatic diagnostics and repair
  • Addedcomplete FR/DE/ES/IT/PL translations
  • Improvedadmin list columns with visual badge indicators and multiselect filters
  • FixedAddLazyLoading regex no longer corrupts inline script blocks
  • FixedStop stripping checkout JS on pages with express checkout buttons
  • Fixedadmin list filters — sorting, searching, and filtering now work correctly on all columns

v1.1.02026-03-12

  • Addedlazy-loading fallback polyfill for Safari 14 and older iOS devices
  • AddedCSS/JS minification toggle per asset type (theme / module)
  • ImprovedRedis connection pooling — module reuses existing PS Redis instance
  • FixedOPcache invalidation race condition after module config save

v1.0.02026-02-20

  • Initialrelease: comprehensive performance suite for PrestaShop
  • InitialRedis full-page caching with automatic tag-based invalidation
  • InitialNative image optimisation pipeline with WebP output
  • InitialCSS/JS minification and CDN origin rewrite
  • InitialCompatible with PS 1.7.x and PS 8.x

v1.2.02026-01-14

  • AddedPS 9 / Hummingbird theme compatibility and Symfony cache layer hooks
  • Addedper-route Redis cache TTL override for high-churn category pages
  • ImprovedWebP conversion quality slider in back-office image settings
  • Optimized DB query cache: deduplicated redundant JOIN patterns in heavy-load scenarios
  • FixedCDN rewrite not applying to srcset attributes in product gallery

Demo

Test the full module before you buy

Buy a licence later and keep your settings.

  • Your 30-day demo Test it on your own shop for 30 days from the first install.
  • Ready demo shop Explore a ready demo shop in your browser.
  • No registration No account, email or store domain needed.
Launch demo shop

By downloading, you accept the demo terms and privacy policy.

By opening this demo you accept the demo terms and the privacy policy.

Loading...
Back to top