WordPress performance challenge
Every so often here at Clook HQ we see a challenge being offered up, usually related to something silly such as eating cupcakes or locating something lost in the office! The last office challenge was a little more interesting though…
With discussions of making our new website as fast as possible a challenge was born to put together a custom hosting environment with the best performance possible for a single website/CMS. To make it interesting some rules were set:
- The hosting platform should be based on one of our regular managed cloud costing no more than £100 per month
- The website will be a standard WordPress install with the Woocommerce addon, both with dummy content in place
- Software used should be open source
- Other services on the server (email, control panels, FTP, etc) should remain usable
After a few weeks of playing around the winner has been decided based on the fantastic page speed results from Pingdom and GTMetrix:
To get this kind of performance a number of techniques were used which are detailed – without giving too much away! – below…
Due to the website not being huge we could go with a fairly modest server specification with a small hard drive. One of our managed cloud servers with the following specification was used:
2 GB RAM
15 GB SSD drive
£93 per month
Out of the box the above server provides adequate performance in a “general hosting” environment allowing for other sites to be hosted on a variety of CMS’s. However, we wanted more and due to this server only hosting one site, could apply customised settings with performance for one site in mind.
Caching is used to store static versions of dynamic pages to avoid having to do resource intensive page rendering for each page load. In addition, some elements can be cached in RAM to get optimum performance.
We used the W3 Total Cache plugin within WordPress to implement caching which has good results for all websites with basic settings. To get the most performance we used Memcached as the cache store for some of the elements which serves data straight from RAM.
Following this, Varnish Cache was installed to sit in front of the web server and serve any cached content directly from RAM without causing any Apache or PHP overhead. While involving a fairly complex configuration to work correctly with WordPress and Woocommerce, we got great results which also applies to SSL connections by using Pound.
Content Delivery Network
While Cloudflare can be used for basic/medium CDN features we were after every last bit of performance so went with our CDN service (provided via the global Edgecast network) allowing all static objects to be served by this instead of adding load to the hosting server.
Some additional WordPress plugins were used to handle image optimisations and other performance tweaks such as the removal of query strings from static objects.
Apache + PHP
Due to all of the caching most pages got served straight from RAM so could handle a a huge amount of visitors. However, for pages that weren’t possible to cache (such as checkouts, admin area, etc) we needed a bit more performance from the standard Apache + PHP install. This was achieved by converting SuPHP to PHP-FPM and stripping away some unused extensions.
Finally, we still wanted SSL protected URL’s to load fast so used Pound to reverse proxy SSL connections to Varnish Cache.
The results speak for themselves in that with a good set of configurations and work on the tight integration between server side optimisation and application, truly fantastic performance can be achieved. The end of contest figures look like this:
Monthly spend: £98 per month (including CDN)
Pingdom load time: 259ms
Pingdom performance grade: 100/100
Google Page Speed Grade: A (98%)
YSlow Grade: A (99%)
For anyone looking to incorporate our WordPress Speedboost service to their cloud/dedicated server for performance WordPress hosting, please contact us to discuss further.
The demo site these results were taken from can be seen at http://wordpress.demo.clook.net