PrestaShop Cache: Full Page Cache Modules Explained — Pros, Cons and What They Actually Do

If your PrestaShop store takes 3+ seconds to load, a full page cache module can cut that to under 200ms. That sounds like a miracle fix — and honestly, for many stores it is exactly the right move. But understanding what these modules actually do under the hood will help you decide whether FPC is a long-term solution for your store, a stepping stone toward deeper optimization, or both.

What Is Full Page Cache?

By default, every time someone visits your store, PrestaShop runs through the entire stack: PHP boots up, loads the framework, queries the database dozens or hundreds of times, renders Smarty templates, and finally sends back HTML. This takes anywhere from 200ms on a well-optimized server to 3–5 seconds on shared hosting.

A full page cache (FPC) module skips all of that. It saves the final HTML output the first time a page is rendered, then serves that saved copy directly for every subsequent visitor. No PHP, no database, no template rendering — just HTML straight from disk or memory.

The result? Response times drop from seconds to milliseconds. For a store that was struggling at 4 seconds TTFB, that is a dramatic, immediate improvement.

How PrestaShop FPC Modules Work

Most full page cache modules for PrestaShop follow a similar pattern:

  1. First visit — The page renders normally through PrestaShop. The module captures the final HTML output and stores it (usually on disk, sometimes in Redis or Memcached).
  2. Subsequent visits — Before PrestaShop even boots, the module checks if a cached version exists. If it does, it serves the HTML immediately and exits. PrestaShop never loads.
  3. Session-less rendering — The cached page is generic: no cart contents, no customer name, no "Welcome back, John" — because it was captured without any session context.
  4. JavaScript hydration — After the static HTML loads, JavaScript makes AJAX calls to fetch session-specific data: cart count, customer name, recently viewed products, login state. The page then updates itself in the browser.

This is the core trade-off of full page caching: the server responds fast, but the browser has extra work to do afterward.

The Pros — And They Are Real

Instant Time to First Byte

TTFB drops from 1–5 seconds to 20–100ms. This is the single biggest performance improvement you can make, and it directly affects your Google Core Web Vitals scores. For stores where the server is the bottleneck (slow hosting, unoptimized database, heavy modules), this is transformative.

A Genuine Lifesaver for Stores in Bad Shape

Let us be honest: not every store owner has the time, budget, or technical resources to do a full performance audit. If your store is slow and your developer availability is limited, FPC gets you back to competitive page speeds today. That is not a compromise — that is a smart business decision. A fast cached store beats a slow uncached store every single time.

Full page cache essentially masks everything that is slow underneath. And for a store that cannot invest in deep optimization right now, that masking is exactly what you need. Ship first, optimize later.

Reduces Server Load

On shared hosting where you have limited CPU and memory, FPC means most requests never touch PHP at all. Your server can handle significantly more concurrent visitors without slowing down or hitting resource limits.

Better Google Rankings

Page speed is a confirmed Google ranking factor. A store that loads in 200ms will rank better than one that takes 4 seconds — especially on mobile. FPC delivers this improvement with minimal effort.

The Cons — What to Be Aware Of

The Session Hydration Problem

This is the most visible trade-off of full page cache.

When the cached page loads, it shows a session-less version of the store. The cart icon shows 0 items. The header says "Sign in" even if you are logged in. Recently viewed products are missing. Currency and language might default to the store primary.

Then, a fraction of a second later, JavaScript kicks in and updates all these elements. The cart count pops in. "Sign in" becomes "Welcome, John". The currency switches.

This creates visible UI jumps — elements shifting, text changing, numbers appearing. Users notice this, even if it happens quickly. On slower devices or connections where the AJAX calls take longer, it can feel glitchy.

CLS (Cumulative Layout Shift) Issues

Those UI jumps hurt your CLS score, which is one of the three Core Web Vitals. You might gain a perfect LCP score from fast page delivery, but lose points on CLS from the hydration updates. The net effect on your overall Core Web Vitals can be smaller than expected.

Stale Content Risk

The cached page is a frozen snapshot. When you update a product price, change a category description, enable a promotion, or run out of stock — the cached version still shows the old data until the cache is invalidated.

Good FPC modules have invalidation hooks, but it is never perfect: price rules affecting multiple products, ERP stock imports bypassing hooks, time-based promotions, and third-party module changes can all lead to briefly outdated content.

Debugging Complexity

When something goes wrong on a cached store, the first question is always: "Is this the cache?" You end up clearing cache as a first troubleshooting step for nearly every issue.

Going Deeper: Fixing the Root Causes

Full page cache is a perfectly valid solution — but it is worth understanding that the slowness it masks usually comes from specific, fixable problems. If and when you have the time and resources, addressing these root causes gives you the best of both worlds: fast page loads without session hydration jumps, stale content risks, or debugging headaches.

This is not something you need to do all at once. Treat it as a roadmap — fix things one at a time as budget and availability allow. Every improvement compounds.

Important: do not bite off more than you can chew. If you do not have the resources for a full optimization project, a well-configured FPC module is the smarter choice than a half-finished optimization that leaves your store in a worse state. Done is better than perfect.

1. Identify Slow Modules

This is almost always the number one cause of slow PrestaShop stores. Every active module can hook into dozens of events, and each hook execution adds to the total render time.

A single module running unindexed database queries in displayHeader can add 500ms to every page load. A stats module logging every page view synchronously can add another 200ms. Stack three or four of these and your store takes 3 seconds just in hook execution.

How to find them:

  • Enable PrestaShop debug profiler (_PS_DEBUG_PROFILING_ in defines.inc.php) — it shows time spent in each hook and module
  • Check the Symfony profiler bar (PrestaShop 8+) for database query counts and times
  • Disable modules one at a time and measure TTFB — the difference tells you exactly how much each one costs

Common offenders: social feed widgets that fetch external APIs, page view counters that write to the database on every request, SEO modules that run heavy queries to generate metadata.

2. Fix Smarty Template Compilation

PrestaShop uses Smarty as its template engine, and Smarty compiles .tpl files into PHP. In production, this should happen once and be cached.

  • force_compile should be off in production — if enabled, every template recompiles on every page load (200–500ms extra)
  • caching should be on
  • After deployments, clear the compile cache once — do not leave force_compile on as a workaround

We have seen stores where force_compile was accidentally left on after a debugging session. The store ran 3x slower for months before anyone noticed.

3. MySQL Configuration

The default MySQL configuration is tuned for general use, not for PrestaShop.

  • innodb_buffer_pool_size — the most important setting. Set to 50–70% of available RAM. If your database is 2GB but the buffer pool is 128MB, MySQL is constantly reading from disk.
  • innodb_log_file_size — increase to at least 256MB for stores with frequent writes
  • Enable slow_query_log temporarily — any query over 1 second gets logged, revealing exactly what needs optimization
  • Clean up bloated tables: ps_connections, ps_log, ps_mail can grow to millions of rows
  • Add missing indexes on custom module tables that grew over time

4. Use Redis for Cache and Sessions

PrestaShop defaults to file-based caching. Under concurrent load, file locking creates contention. Redis moves all of this to memory:

  • Smarty cache — template output from disk to memory, reads go from milliseconds to microseconds
  • Symfony cache — routes, service containers, annotations (PrestaShop 8+)
  • PHP sessions — eliminates file locking issues that cause requests to queue up

A single Redis instance with 256MB handles all these workloads for a typical store. The improvement is most noticeable under load.

5. PHP and OPcache Tuning

  • PHP 8.1+ — 20–40% faster than PHP 7.4. The single easiest performance win if you are on an older version.
  • OPcache — caches compiled PHP bytecode. Must be enabled in production. Set opcache.validate_timestamps=0 for maximum speed (requires manual reset after deployments).
  • Realpath cache — increase realpath_cache_size to 4096K. PrestaShop includes hundreds of files per request.

6. Front-End Optimization

  • CCC (Combine, Compress, Cache) — combines CSS/JS into single bundles, reducing HTTP requests
  • Critical CSS — inline above-the-fold styles directly in HTML, defer the full stylesheet. Eliminates render-blocking CSS.
  • JavaScript deferral — non-critical JS (analytics, chat, social) loads after main content via defer or requestIdleCallback
  • Image optimization — WebP/AVIF formats (25–50% smaller), responsive srcset, explicit dimensions to prevent CLS
  • CDN — cache static assets at edge locations worldwide. Complementary to server optimization, not a replacement.

The Combined Effect

These optimizations compound. Fixing slow modules saves 500ms–2s. MySQL tuning saves 100–300ms. Redis saves 50–200ms. PHP 8 + OPcache saves 100–300ms. Critical CSS improves perceived load by 500ms–1s. A store that started at 4 seconds TTFB can realistically reach sub-200ms — with every page rendering fresh, correct session data, and zero trade-offs.

But again: this takes time and expertise. If you are not there yet, a good FPC module is the right call.

Bottom Line

Full page cache modules for PrestaShop are a legitimate, effective solution for making slow stores fast. They work by serving static HTML snapshots and hydrating session data via JavaScript — which comes with trade-offs around UI jumps, stale content, and debugging complexity.

For stores that need speed now and cannot invest in deep optimization, FPC is the pragmatic choice. For stores that have the resources to dig deeper, fixing the root causes — slow modules, misconfigured templates, untuned databases, missing caches — delivers the same speed without the trade-offs.

The best path? Use FPC if you need to. But keep the deeper optimization on your roadmap. When you get to it, your store will be fast on its own — and you can retire the full page cache knowing everything underneath is healthy.

Share this post:
David Miller

David Miller

Over a decade of hands-on PrestaShop expertise. David builds high-performance e-commerce modules focused on SEO, checkout optimization, and store management. Passionate about clean code and...

Enjoyed this article?

Get our latest tips, guides and module updates delivered to your inbox.

Comments

No comments yet. Be the first!

Leave a comment

Loading...
Back to top