I decided to run a quick test to see just how much caching matters in a WordPress. I ran this test against a stock WordPress 3.8 install running Twenty Fourteen using Siege. I used the base nginx config from Varying Vagrant Vagrants. The site was loaded with the Theme Test Data so it had more than one post.
I did three test runs, all of them using 100 concurrent users requesting the homepage 100 times for a total of 10000 page loads.
The first test run was a completely stock WordPress install.
Transactions: 569 hits Availability: 34.19 % Elapsed time: 499.20 secs Data transferred: 30.00 MB Response time: 27.48 secs Transaction rate: 1.14 trans/sec Throughput: 0.06 MB/sec Concurrency: 31.33 Successful transactions: 569 Failed transactions: 1095 Longest transaction: 30.01 Shortest transaction: 0.00
As we can see, it didn’t take long for the site to fail. Only 569 requests succeeded.
Next I enabled the memcached plugin and setup memcached (with the stock VVV memcached config).
Transactions: 1047 hits Availability: 49.76 % Elapsed time: 629.86 secs Data transferred: 58.56 MB Response time: 28.51 secs Transaction rate: 1.66 trans/sec Throughput: 0.09 MB/sec Concurrency: 47.40 Successful transactions: 1047 Failed transactions: 1057 Longest transaction: 30.07 Shortest transaction: 1.04
Almost double the number of transactions succeeded, but we still brought the server down.
Finally, I enabled batcache as a full page cache.
Transactions: 10000 hits Availability: 100.00 % Elapsed time: 110.76 secs Data transferred: 593.44 MB Response time: 1.10 secs Transaction rate: 90.29 trans/sec Throughput: 5.36 MB/sec Concurrency: 99.56 Successful transactions: 10000 Failed transactions: 0 Longest transaction: 3.26 Shortest transaction: 0.54
100% Success! You will also notice that this run took less than 20% of the time as my previous attempt where only ~1/10 of the requests succeeded.
Moral of the story: WordPress + Memcached + Batcache = Win!