Performance Revolution: setup and help
Quick start
- Upload and install the ZIP in Modules > Module Manager, then open Performance > Settings.
- Choose Cache Backend and verify the effective Redis endpoint or another available adapter.
- Check Global Cache and Front Office under Cache > Overview.
- Review Fragment Caching, Query Cache, Asset Optimization and Images, then save the initial configuration.
- If using full-page caching, enable Enable Origin Page Cache and inspect Diagnostic Header on a clean anonymous URL.
- Request the page twice, then verify separate cart, login, account and checkout sessions bypass shared anonymous HTML.
- 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 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
Deleted pages still consume cache capacity
Cache clears can leave recently regenerated content stale
Footer carousel fails when its startup script is delayed
Missing catalogue pages receive a shared cache policy
Incomplete pages enter the page cache
Google One Tap prevents otherwise public pages from being cached
Emptying a cart leaves anonymous visitors uncached
Deferred script bundles fail to initialise
Asset management page fails to open
PrestaShop 9 back-office login redirect fails
Targeted cache clearing does not resolve selected products
Group-specific prices are affected by cached missing data
Visitor performance averages are misleading
Filtered catalogue pages show another filter result
Dynamically loaded controls lose their styling
Content image lightbox does not open promptly
Homepage hero slider starts too late
Modern image variants are missing or outdated
Cache clearing misses translated catalogue pages
Security hardening
Cache management screens fail to open or remove entries
Anonymous cart contents are lost with page caching
Dropdown menus flash open during page loading
Signed previews show cached public content
Lazy image optimisation damages page scripts
Express checkout buttons stop working
Feature Requests
17
Implemented
Scheduled origin and Cloudflare cache warming
Cloudflare full-page caching
Critical stylesheet generation
AVIF images and deferred assets
Navigation prefetching
Generated asset retention
One-click module updates
Instant Navigation and early resource hints
Automatic cache warming
Content page caching
Exceptions for deferred assets
Scheduled publication-aware cache expiry
Public page cache for staff
Data-prioritised cache warming
Cache miss diagnostics
Page rendering load protection
Optional page data prefetching
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.
By downloading, you accept the demo terms and privacy policy.
By opening this demo you accept the demo terms and the privacy policy.