Web Design

Magento 2 Performance Optimisation: How to Make Your Store Load Faster

Magento 2 performance optimisation has six layers: (1) Server stack — use PHP 8.x, Nginx, MySQL 8.0/MariaDB 10.4, Redis for full-page and session cache, Elasticsearch for search; (2) Varnish full-page cache — the single highest-impact improvement, reducing cached page load from seconds to milliseconds; (3) Production mode — switch from developer to production mode, which enables CSS/JS merging and compilation; (4) CDN — serve static assets (images, CSS, JS) from a CDN edge close to each visitor; (5) Image optimisation — compress and resize product and category images; (6) JavaScript optimisation — enable JS bundling and defer non-critical scripts.

Published: 2018-08-09 | Last Updated: 2018-08-09 | 9 min read

Key Takeaways

  • Magento 2's default configuration is designed for development, not production performance — enabling production mode alone reduces JS/CSS file sizes significantly.
  • Varnish full-page cache is the single highest-impact improvement — it serves cached HTML in 10–50ms instead of the 2–8 seconds of a full PHP/MySQL page generation.
  • Redis should be configured for both Magento's full-page cache backend and session storage — replacing the default file-based cache with a significantly faster in-memory store.
  • Shared hosting is incompatible with Magento 2's server requirements — managed Magento hosting or a properly configured VPS/cloud server is the minimum appropriate environment.
  • Image optimisation (compression, WebP format, lazy loading) and a CDN for static assets deliver significant load time improvements for product and category pages.

Magento 2 is built for complexity — it handles hundreds of thousands of SKUs, complex pricing rules, multi-store configurations, and B2B workflows that simpler e-commerce platforms can't support. But this power comes with a performance overhead: Magento 2's PHP application is more resource-intensive than Shopify or WooCommerce, and its default development configuration is explicitly not optimised for production speed. Merchants who migrate to Magento 2 or launch a new Magento 2 store without investing in the proper server stack and performance configuration frequently end up with a slow store — and incorrectly conclude that Magento is inherently sluggish. It isn't, in the right infrastructure. A properly configured Magento 2 store with Varnish, Redis, a CDN, and optimised assets delivers sub-second page loads for cached content and competitive performance on uncached pages. This guide covers the optimisation stack in the order that typically produces the largest improvements — from server infrastructure to front-end code.

Definition: Full-Page Cache vs Object Cache in Magento 2

Magento 2 has two primary caching mechanisms. The Object Cache stores computed data objects — configuration, layout, translations, block HTML — so they don't need to be recalculated on each request. Redis is the recommended object cache backend, replacing Magento's default file cache with a significantly faster in-memory store. The Full-Page Cache (FPC) stores complete rendered HTML pages and serves them without involving PHP or MySQL at all. Magento's built-in FPC (enabled in production mode) works adequately for low traffic. Varnish Cache replaces Magento's built-in FPC for production stores, providing dramatically better performance, more sophisticated cache invalidation, and the ability to handle much higher concurrent traffic. Both caches work together — Varnish at the HTTP level, Redis at the application level.

Getting the Server Stack Right: The Foundation of Magento 2 Performance

The Magento 2 performance stack requires PHP 8.x, Nginx, MySQL 8.0 or MariaDB 10.4, Redis, Elasticsearch, and Varnish — components that cannot be satisfied on shared hosting.

PHP version has a measurable performance impact. PHP 8.x is significantly faster than PHP 7.4 for Magento workloads — benchmarks typically show 10–30% improvement in application throughput when upgrading from PHP 7.4 to 8.x. Ensure your hosting environment runs PHP 8.1 or 8.2 (verify Magento 2.4.x compatibility) with the OPcache extension enabled. OPcache stores compiled PHP bytecode in memory, eliminating the parsing overhead on every request — it should be configured with sufficient memory allocation (256MB or more) for a Magento 2 installation.

Redis should be configured as both the Magento cache backend and the session storage backend. By default, Magento stores cache data as files on disk and session data in the database — both are significantly slower than Redis's in-memory storage. Configure Redis in app/etc/env.php for the default cache, the page cache (if not using Varnish), and session storage. Use separate Redis instances or Redis databases for each function to avoid cache and session data competing for memory. Redis dramatically reduces database query volume and PHP processing time for cached operations.

Elasticsearch is required for catalog search in Magento 2.4 — the MySQL-based search from earlier versions was removed. Elasticsearch provides significantly better search relevance and performance for large catalogues and complex attribute filtering. Run Elasticsearch 7.x on a separate server or a managed Elasticsearch service (AWS Elasticsearch, Elastic Cloud) for production installations — co-locating Elasticsearch on the same server as Magento's PHP and MySQL processes creates resource contention.

  • PHP 8.1 or 8.2 with OPcache configured at 256MB+
  • Nginx instead of Apache — better performance for Magento's static file serving
  • MySQL 8.0 or MariaDB 10.4 with innodb_buffer_pool_size set to 70% of available RAM
  • Redis for cache and session storage — separate instances or databases for each
  • Elasticsearch 7.x for catalog search (required in Magento 2.4+)
  • Managed Magento hosting (Nexcess, Cloudways, Hypernode) pre-configures this stack

Varnish and CDN: The Two Caching Layers That Transform Store Speed

Varnish full-page cache serves cached pages in milliseconds; a CDN delivers static assets from geographically distributed servers — together they handle most of your store's traffic without touching PHP.

Enable Varnish full-page cache by: installing Varnish 6.x on your server, generating Magento's Varnish configuration file (from the Magento admin under System > Configuration > Advanced > System > Full Page Cache, select Varnish Cache and export the VCL), configuring Varnish to use this VCL, and pointing your web traffic to Varnish's port (typically 6081 or 8080) rather than Nginx directly. Once configured, Magento sends HTTP cache headers with TTL values for each page type, and Varnish caches responses accordingly. Cache hit rate — the percentage of requests served from Varnish without touching PHP — should reach 80–95% on a properly configured store, depending on traffic patterns and catalogue size.

A Content Delivery Network (CDN) serves Magento's static assets — JavaScript, CSS, fonts, product images — from servers geographically close to each visitor. For a store with visitors across a country or continent, CDN delivery reduces asset load times significantly compared to serving everything from a single origin server. Configure Magento's CDN base URL (System > Configuration > Web > Base URLs) to point to your CDN distribution, and set up the CDN to pull static files from your Magento store's pub/static and pub/media directories. Cloudflare, AWS CloudFront, and Fastly are commonly used CDN providers for Magento — Magento Cloud uses Fastly as its integrated CDN.

For Magento 2's JavaScript, enable JavaScript bundling and minification in the admin (System > Configuration > Advanced > Developer > JavaScript Settings). Bundling combines multiple JavaScript files into fewer bundles, reducing HTTP requests. Minification removes whitespace and comments from JavaScript and CSS files. Both should be enabled in production mode. Note that JavaScript bundling in Magento 2 has historically had issues with bundle sizes — test thoroughly after enabling, and consider advanced bundling approaches (RequireJS build profiles) for stores with very large JavaScript payloads.

Image Optimisation: The Highest File-Size Reduction Available

Product and category images typically account for 60–70% of Magento page weight — compressing them to modern formats and configuring lazy loading produces the largest single file size reduction.

Magento 2 automatically generates multiple sizes of product images based on your theme's image size configuration — thumbnail, small image, base image, and swatch. Ensure these size configurations are set appropriately for the actual display sizes in your theme rather than the Magento defaults, which are often larger than necessary. Use the `bin/magento catalog:images:resize` command to regenerate images after changing size configuration.

Install an image optimisation extension that compresses product images on upload and converts them to WebP format for browsers that support it (Chrome, Firefox, Edge — all major modern browsers). Extensions like Tinify for Magento or Kraken.io integrations automatically compress images without visible quality loss, reducing typical JPEG product images by 40–70%. Serve WebP with JPEG/PNG fallback using Magento's built-in WebP support (available from Magento 2.4) or through your CDN's image transformation capability.

Implement lazy loading for product images on category pages and below-fold images on product pages. Magento 2.4 includes native lazy loading support. For earlier versions, add the `loading='lazy'` attribute through theme template modifications. Category pages with 24–48 product thumbnails benefit significantly from lazy loading — only images in the visible viewport load initially, with the remainder loading as the user scrolls.

Experience Signal

Every Magento 2 performance engagement starts the same way: run the PageSpeed Insights test on the homepage, category page, and a product page. The first reveals the baseline. Then check if Varnish is configured — frequently it isn't, or it's installed but incorrectly configured with a low cache hit rate. Enabling and correctly configuring Varnish alone moves a slow Magento store from 8–12 second load times to 500ms–1.5s for cached pages. The remaining gap after Varnish is usually images (large uncompressed JPEG uploads) and JavaScript (no bundling or minification in production mode). Each layer of optimisation is independent and measurable — instrument before and after each change so the impact of each improvement is visible.

Frequently Asked Questions

Magento 2's default configuration is not optimised for production performance — it's designed for development and debugging. In production, Magento generates pages dynamically by running PHP processes, querying MySQL, and processing its complex plugin (module) system on each request. Without Varnish cache, each page load triggers this full generation cycle, which can take 2–8 seconds on a typical server. Add un-optimised images, unminified JavaScript and CSS, no CDN, and inadequate server resources, and the result is a consistently slow store. The solution is not a different platform — it's correctly configuring Magento 2's production infrastructure.

Sources

Is Your Magento 2 Store Slower Than It Should Be?

Webnixon conducts Magento 2 performance audits and implements the full optimisation stack — server configuration, Varnish, Redis, CDN, image optimisation, and front-end code — with before and after benchmarking.

Book a Magento Performance Audit

About the author

Jai Paek

Jai Paek

Creative Director

Jai leads brand identity and UX design at Webnixon, bringing 20+ years of experience building digital design systems for agencies and enterprise teams. He has shipped design systems and visual identities for over 200 brands across Canada and the US, with deep expertise in conversion-focused UI, WCAG 2.1 accessibility compliance, and responsive web design for service businesses and ecommerce brands.

Related Articles

Migrating from Magento 1 to Magento 2: What Every Merchant Needs to Know

Web Design

Migrating from Magento 1 to Magento 2: What Every Merchant Needs to Know

Magento announced in late 2016 that Magento 1 will reach end of life on June 30, 2020 — meaning no more security patches, official support, or new extensions. Merchants still running Magento 1 have a clear deadline to migrate, but migration is a complex process that requires careful planning. Here's what it actually involves.

July 13, 2017Jai Paek9 min read
Magento vs Shopify for Enterprise: Which Platform is Right for Your Business?

Ecommerce

Magento vs Shopify for Enterprise: Which Platform is Right for Your Business?

For enterprise commerce, Magento offers deeper native customization and B2B flexibility, while Shopify Plus offers faster deployment and lower operational overhead. The right choice depends on complexity, team maturity, and long-term ownership goals. This guide includes Ontario context, practical checklists, and a clear action framework for business owners.

October 16, 2025Marcus Lee13 min read