Quickshiftin - Clever Crazy Code


Project on Github

Magento full page cache warmer

If you’re running Magento and using a full page cache like Lesti FPC, once you have the FPC configured and working, you might consider warming the cache so all the pages load quick for your customers the first time they hit them.

wfpc relies on a sitemap.xml file; you can read how to generate one for your Magento site here. Once you have a sitemap generated (and an FPC configured), you’re good to hit the site with the cache warmer.


Testing Performance

wfpc has two modes of operation, the first is test mode. This randomly selects 10 URLs from your sitemap to load. An example

./wfpc -t http://mymagentosite.com/sitemap.xml

You’ll see a fancy summary of your site’s performance

Finished testing your Magento site performance
Total download time (in seconds)   : 5.0269110202789
Total download time (formatted)    : 0:0:5.026
Average page time (in milliseconds): 502.69110202789

Warming the FPC

To actually warm the FPC, use -w as the first argument. wfpc will fetch each URL listed in sitemap.xml synchronously. If you want to put a delay between requests, you can add a -d=delay-seconds after the -w argument. An example

No delay

./wfpc -w http://mymagentosite.com/sitemap.xml

With 1 second delay

./wfpc -w -d=1 http://mymagentosite.com/sitemap.xml

If you have a large site with a lot of URLs to warm, you might consider running wfpc within a screen session.

FPC configuration tips

  • Make sure you have a reasonably high TTL for your FPC. If your pages expire from the FPC quickly, there’s not much point to warming them all!
  • If you’re using a memory-based store for your FPC like APC, Redis or Memcache, keep an eye on the usage of the store as your cache is warming. For example, if you have a large site you want to cache, you may overrun your cache storage limit if you’re not careful!

Notes of interest

  • The script should run on Windows, but I haven’t tested it there. You’ll probably need to run it as php wfpc args... in that case.
  • The script relies upon a few things in PHP
    • Filter extension
    • SimpleXML extension
    • allowurlfopen = 1
  • The code is nothing to brag about, I put it together in a few hours for my own needs. If folks like it, I can clean it up.
  • This script will actually work for any site that has a sitemap.xml file. If you have an FPC mechanism on a site running something other than Magento, you may still find the script useful!