Skip to main content
MagentoMay 2, 202410 min read

How to Boost Magento 2 Performance in a Few Easy Steps

Magento 2 delivers incredible flexibility for eCommerce, but without proper optimization it can become sluggish. This guide walks through ten proven DevOps strategies to dramatically speed up your store, from PHP upgrades and full-page caching to Varnish, Redis, CDN configuration, and ongoing code audits.

Introduction

Magento 2 powers thousands of online stores, and for good reason -- it's incredibly flexible. But that flexibility comes at a cost. Out of the box, without proper tuning, Magento can feel sluggish. I've worked on stores where a 3-second page load was considered "normal," and the owners had no idea how much revenue they were leaving on the table.

The numbers are stark. Every extra second of load time can drop conversions by roughly 7 percent. Even trimming 100 ms off response times has been linked to a 1.1 percent bump in cart completions. That's real money.

Mobile shoppers in 2025 won't wait around. They expect sub-two-second loads, and Google now bakes Core Web Vitals -- FCP, LCP, and the rest -- into its ranking algorithm. So speed isn't just a UX issue; it's an SEO issue too.

What follows is a collection of DevOps strategies and Magento tweaks we've used on production stores. PHP 8.x JIT, layered caching with FPC and Varnish, Redis for sessions, CDN configuration, image optimization, database tuning, Elasticsearch scaling -- the works. Whether you're running a small boutique or a catalog with 50k SKUs, these steps apply.

Quick Navigation

1. Update to the Latest PHP Version

PHP version matters more than most people think with Magento. PHP 8.3 brings improved JIT compilation, a tighter type system, and the latest security patches. We've seen 15-20% throughput gains just from upgrading PHP on otherwise identical hardware.

1.1 Install PHP 8.3 and Extensions

sudo apt update
sudo apt install -y php8.3 php8.3-cli php8.3-fpm \
  php8.3-imap php8.3-redis php8.3-amqp php8.3-mysql \
  php8.3-zip php8.3-gmp php8.3-pgsql php8.3-soap \
  php8.3-intl php8.3-mbstring php8.3-xml php8.3-gd \
  php8.3-curl php8.3-bcmath php8.3-msgpack php8.3-readline \
  php8.3-common php8.3-imagick

1.2 Restart Services

sudo systemctl restart php8.3-fpm nginx

Tip: Hook up New Relic or Datadog to track PHP-FPM metrics like pm.max_children and the slow log. You'll want to fine-tune pool settings based on actual traffic patterns, not guesswork.

2. Enable Full-Page Cache (FPC)

Magento's built-in Full-Page Cache stores fully rendered pages so PHP and the database don't get hit on every request. When it's configured right, 80-90% of your page views get served straight from cache. It's honestly the single biggest win for most stores.

Verify & Enable

bin/magento cache:enable full_page

Cache Warming

  • Set up n98-magerun2 in a cron job to crawl your highest-traffic URLs after each deploy
  • Don't forget to pre-warm categories, products, CMS pages, and search result pages

TTL Settings

// app/etc/env.php
'cache_types' => ['full_page' => 3600],

3. Optimize Database Settings

MySQL and MariaDB come with conservative defaults -- they're tuned for generic workloads, not the heavy read/write patterns Magento produces. A few InnoDB tweaks go a long way.

3.1 InnoDB Buffer Pool & IO

# /etc/mysql/mysql.conf.d/magento.cnf
innodb_buffer_pool_size=70% of RAM
innodb_flush_method=O_DIRECT
innodb_io_capacity=2000
innodb_log_file_size=1G
max_connections=500

3.2 Flatten Category Tables

Magento's EAV structure is flexible but it leads to notoriously slow category queries. Flat catalog tables fix that:

  • Head to Stores > Configuration > Catalog > Catalog > Storefront in the Admin
  • Set Use Flat Catalog Category to Yes
  • Then reindex:
bin/magento indexer:reindex catalog_category_flat

3.3 Persistent Connections

# php.ini
db.persistent.connections=1

This eliminates repeated TCP handshake overhead. Watch your open connection counts though -- you don't want to exhaust the pool.

4. Implement Varnish Cache

Varnish acts as an HTTP accelerator in front of Magento. It's the difference between "fast" and "instant" for returning visitors. I've seen Varnish take a 2-second TTFB down to under 50 ms on cached pages.

4.1 Generate the Magento VCL

Magento has a built-in command that spits out a VCL config tailored to your store:

bin/magento varnish:vcl:generate --export-version=6 --dir=/etc/varnish/

This drops a default.vcl into /etc/varnish/.

4.2 Deploy the VCL to Varnish

Copy or symlink the generated VCL, then reload:

sudo systemctl reload varnish

4.3 Magento Admin Settings

Go to Stores > Configuration > Advanced > System > Full Page Cache and switch to Varnish Caching. Double-check that your Config TTL and Access List match whatever you've set up on the Varnish side.

5. Use a Content Delivery Network (CDN)

A CDN like Cloudflare or AWS CloudFront serves static assets from edge locations near your visitors. The latency improvement is dramatic, especially for international stores.

5.1 Key CDN Features for 2025

  • HTTP/3 and QUIC -- faster TLS handshakes, noticeable on mobile
  • Edge-based image optimization with automatic WebP/AVIF conversion
  • Custom edge rules for geo-redirects or A/B testing

5.2 Cache-Control Headers

location ~* \.(jpg|jpeg|png|webp|css|js|svg)$ {
  expires 30d;
  add_header Cache-Control "public, max-age=2592000, immutable";
}

The immutable directive tells browsers not to revalidate these assets during their cache lifetime -- one fewer round trip per resource.

6. Set Magento to Production Mode

This one's easy to overlook but it matters a lot. Production mode disables development helpers, pre-generates DI, and minifies static files:

bin/magento deploy:mode:set production
# php.ini OPcache settings
enable_opcache=1
opcache.memory_consumption=512
opcache.max_accelerated_files=20000
opcache.revalidate_freq=0

7. Optimize Images & Use WebP

Image optimization is low-hanging fruit. Converting to WebP or AVIF and compressing existing images can cut page weight by 40-60% with zero visual difference.

Server-Side Tools

sudo apt install -y webp imagemagick
find pub/media -type f \( -iname "*.jpg" -o -iname "*.png" \) -exec cwebp -q 80 {} -o {}.webp \;

Magento Plugins

  • SPRYKER ImageOptimizer
  • Fastly Image Optimizer

8. Use Redis for Sessions & Caching

File-based sessions and cache are fine for development, but in production they're a bottleneck. Redis moves everything into memory, and the difference in latency is night and day.

Install Redis Server

sudo apt install -y redis-server

Configure via Magento CLI

bin/magento setup:config:set \
  --session-save=redis \
  --session-save-redis-host=127.0.0.1 \
  --session-save-redis-port=6379 \
  --cache-backend=redis \
  --cache-backend-redis-server=127.0.0.1 \
  --cache-backend-redis-db=0 \
  --cache-backend-redis-ttl=86400
bin/magento cache:flush

9. Configure Elasticsearch

Magento 2.4.x depends on Elasticsearch for catalog search. With proper tuning, search queries consistently stay under 50 ms.

JVM & Shard Settings

# /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g
PUT /magento2_v1
{ "settings": { "number_of_shards": 3, "number_of_replicas": 1 } }

10. Regularly Audit & Optimize Code

Performance work isn't a one-time thing. We build profiling and static analysis into CI so regressions get caught before they hit production. It's saved us more times than I can count.

Static Analysis

composer require --dev magento/magento-coding-standard
vendor/bin/phpcs --standard=Magento2 app/code

Final Thoughts

Stack all of these together -- latest PHP, FPC, Varnish, a CDN, image optimization, Redis, Elasticsearch tuning, and regular code audits -- and you're looking at sub-1.5-second page loads and Lighthouse scores above 90. We've done it repeatedly across different store sizes.

For help with performance tuning, monitoring, or managed upgrades, reach out to us at Private DevOps.

Need help with this?

Our team handles this kind of work daily. Let us take care of your infrastructure.