Table of Contents
ToggleIf you are new to blogging or internet marketing, you might not know the value of cache.
Not only if you are new, but thousands of experienced bloggers/internet marketers don't leverage the power of caching and end up paying hundreds of dollars to VPS company to maintain a website that can be supported on a small server too!
This article is one of the most important articles published in this blog. We are not only going to compare top 5 WordPress caching plugins and conclude based on results directly.
First, we will understand the basics of caching and the results we will get after sending an army of 300 fake visitors to the server constantly for 2 minutes.
In this article, we are going to explore following topics in depth.
- What is caching?
- How will caching plugin improve the performance of your WordPress site?
- Setting up a Test Environment.
- Test case: WordPress with no caching plugin
- Test case: WordPress with W3 Total Cache.
- Test case: WordPress with WP Super Cache.
- Test case: WordPress with WP Fastest cache.
- Test case: WordPress with Comet cache.
- Test case: WordPress with Cache Enabler.
- Conclusion based on the results.
So, these are the ten topics we are going to cover in this article. If you understand the basics of cache, you can skip first two topics.
Without wasting any more time in the introduction, let's dive straight into the first and the most fundamental topic of this article.
What is caching?
To understand caching, We first have to know how a typical request sent to a web server is processed.
WordPress is written in PHP. So, When a request is made to the server from a visitor's browser, Server will filter out .php files and will send those files to PHP Processor which will execute the PHP file and will return a rendered page to a web server.
Once a web server gets rendered result from PHP processor, It will return the whole page to user's browser along with extra static files that do not require rendering.
Some files like .css, .jpg, .pdf, etc does not require rendering. So, those files will be served or returned directly to the user's web browser.
In case you have a WordPress website with many plugins and a heavy theme, each page request will require too much processing, and you will be able to serve less number of visitors every in comparison with a website having fewer plugins and an optimized theme.
Cache is a processed/rendered information that can be served directly to decrease the number of requests that needs rendering/processing and returns the same rendered data most of the time.
So, Caching means processing a code once and returning the same rendered information to a visitor sending the same request.
For example, Let's assume that we are getting 100 visitors every minute and the caching is not configured on our website. In this case, our server will send all the .php files to PHP processor for processing and will wait for PHP processor to return rendered information FOR EACH OF 100 REQUESTS EVERY MINUTE.
We don't update the content of hour homepage or any specific post at that rate, right? So, there is no need call PHP processor every time a visitor sends a page request to a web server. It's better to serve the information that is already processed as it will decrease the load on our server by a huge factor!
Here is how cache system works precisely with all the websites created in PHP (WordPress is PHP).
As you can see, Once our page is cached (Processed and stored so that we can serve it whenever we want), we can eliminate excess CPU usage and processing overhead.
Let's see how configuring a caching system will improve the performance of your WordPress Website.
How can a caching system improve the performance of a WordPress site?
WordPress is made up of small PHP files that make up the whole page. If you don't believe, Go to Appearance -> editor and check how many files you have with a .php extension.
Those are the files that make up your theme. If you don't have cache enabled, those PHP files are processed again and again with every pageview your website gets.
It's true that we made computers to do repeated tasks, but it's time and resource consuming task for computers too. So, Enabling a caching system on your WordPress site will decrease processing overload and CPU usage because the pages that your visitors are accessing are already processed once and can be directly served.
Now we know how exactly caching works. So, we can go for a complex example to understand how it works in real world. Let's assume that we are getting 100 pageviews every minute on the homepage, 60 pageviews every minute on Article 1 and 30 pageviews every minute on Article 2.
When a first visitor visits the homepage, our server will process the code and will generate a rendered page. That rendered page will be served directly to other 99 page requests. Same goes for Article 1 and Article 2.
Now, we will create a test website. I will show you how I created a WordPress website so that you can conclude on your own if this test was accurate or not.
Setting up a Test Environment
When I see other load tests, Testers just create a blank WordPress website and execute tests directly on a blank WordPress website which can't give you accurate results.
To make it more realistic, I have created a WordPress website with following data.
- 25 Users (Roles: Author, Contributor, and admin)
- 35 Terms (Terms: Tags, Categories)
- 100 Articles
- 1000 comments spread randomly over 100 articles
I have configured this WordPress website on DigitalOcean Droplet managed by ServerAvatar. The size of the droplet is 1GB($5 droplet) which is used by the majority of the bloggers who are just getting started with DigitalOcean.
I have installed SSL Certificate on this website using ServerAvatar to make stuff even more realistic. If you want to know exactly how I configured this droplet and hosted a WordPress website on it, Click here for the tutorial.
We will follow one pattern to make sure tests are as perfect as they can be.
For each test case, we will first send 300 concurrent visitors to the homepage of the website for 2 minutes. We will also test the speed of site using Pingdom's tool for website speed test while the server is under the pressure of 300 concurrent visitors.
We will also repeat the same process for internal pages like Post. We will select one random post and will send 300 concurrent visitors to the Post URL too.
We are going to use Siege to send fake visitors to our website. Siege is a command line tool used to perform load testing on your servers.
So, this is how we will perform load testing. We will repeat the same process for all the test cases. And of course, we will restart our server after every test. That way, we can make sure that server has all the required resources and no resource is being used by other processes used in the previous test case.
Our first test case is a WordPress website without any caching plugin at all! I want to add this scenario as a test case because I wanted to show our readers how much difference a simple cache plugin can make.
So, let's get started with the first test case.
Test case: WordPress with No Caching Plugin
From the results we got by sending an army of 300 concurrent visitors for 2 minutes on a WordPress website that doesn't have cache, It's not a good idea to have no caching system at all.
For this test case, we will send traffic to homepage only. Here are the results that we got for homepage after the end of the test.
- Transactions: 2288 hits
- Availability: 100.00 %
- Elapsed time: 119.44 secs
- Data transferred: 19.76 MB
- Response time: 14.13 secs
- Transaction rate: 19.16 trans/sec
- Throughput: 0.17 MB/sec
- Concurrency: 270.63
- Successful transactions: 2288
- Failed transactions: 0
- Longest transaction: 17.64
- Shortest transaction: 0.88
As you can see, the Average response time of the website was 14.13 seconds which is not even acceptable. If you have a site with response time higher than 2 seconds, You should investigate and improve the response time of your website if you want your site to rank on top of every other website.
The number of transactions in two minutes is 2288 which is not good at all, and the longest transaction took 17.64 seconds which is not acceptable if you want your visitors to love your website.
Here is how the website performed for a user when it was under the load of 300 concurrent visitors.
So, WordPress without caching system is not a good idea for website having high traffic. Now let's how W3 Total Cache performs.
Test case: WordPress with W3 Total Cache
As a new blogger or a blogger with no technical knowledge, you would enable basic settings in the plugin and hope that plugin will work as expected.
W3 Total Cache is that kind of WordPress Caching plugin. When I installed this plugin on my website, I just enabled basic settings provided by W3 Total Cache. And here are the results I got when I sent 300 concurrent visitors on the Homepage for two minutes.
- Transactions: 31076 hits
- Availability: 100.00 %
- Elapsed time: 119.66 secs
- Data transferred: 268.89 MB
- Response time: 0.47 secs
- Transaction rate: 259.70 trans/sec
- Throughput: 2.25 MB/sec
- Concurrency: 122.71
- Successful transactions: 31120
- Failed transactions: 0
- Longest transaction: 9.24
- Shortest transaction: 0.00
Can you see the difference? Our WordPress website can now handle ten times more requests on the same server with an average response time of 0.47 seconds.
The reason we decided to perform tests on Homepage, as well as post, is that they both need different data from the server. For instance, Homepage needs a list of articles, but a post needs whole post body and comments that belong to the post.
Here are the results we got on the post page.
- Transactions: 29867 hits
- Availability: 100.00 %
- Elapsed time: 119.13 secs
- Data transferred: 269.32 MB
- Response time: 0.51 secs
- Transaction rate: 250.71 trans/sec
- Throughput: 2.26 MB/sec
- Concurrency: 128.22
- Successful transactions: 29906
- Failed transactions: 0
- Longest transaction: 8.82
- Shortest transaction: 0.00
The number of transaction decreased because as I told you, both are different pages and needs different data. The overall performance of W3 Total Cache is really awesome!
Our Test website performed really good at user's end even when it was under pressure of 300 concurrent visitors.
It's not hard to configure this plugin just as we did. You just have to install the plugin and enable basic settings on the plugin page, and you are good to go! It's perfect for blogs that get sudden traffic spikes.
Test case: WordPress with WP Super Cache
WP Super Cache is one of the most popular WordPress Caching plugin available on the WordPress plugin repository. It is also recommended by lots and lots of bloggers as the best caching plugin.
No exceptions, We replaced WP Super Cache with W3 Total cache and enabled all basic settings we managed to find on the settings page. Here are the results we got by sending 300 concurrent visitors for 2 minutes on the homepage.
- Transactions: 19571 hits
- Availability: 100.00 %
- Elapsed time: 119.11 secs
- Data transferred: 170.28 MB
- Response time: 1.28 secs
- Transaction rate: 164.31 trans/sec
- Throughput: 1.43 MB/sec
- Concurrency: 210.77
- Successful transactions: 19575
- Failed transactions: 0
- Longest transaction: 5.64
- Shortest transaction: 0.23
Not as good as W3 total cache right? With all the basic settings, Yes. Every WordPress Caching plugin has something unique to provide. W3 Total Cache served as many requests as it could, But longest transaction in case of the W3 Total cache was ~9 seconds which is not the case with WP Super Cache.
It served less number of requests, ~4,500/minute less, but still, it served all the requests faster than W3 Total Cache. Here are the results from post page with the same configuration.
- Transactions: 19592 hits
- Availability: 100.00 %
- Elapsed time: 119.32 secs
- Data transferred: 177.06 MB
- Response time: 1.29 secs
- Transaction rate: 164.20 trans/sec
- Throughput: 1.48 MB/sec
- Concurrency: 211.35
- Successful transactions: 19599
- Failed transactions: 0
- Longest transaction: 6.03
In case of W3 Total cache, Number of transactions in case of Homepage and Post page is same. It's better with posts. And again, a Longest transaction is still better than W3 Total Cache.
The performance of website under pressure was not as good as W3 Total cache, but it's a lot better than no-cache.
It's good that our server is handling all the traffic we are sending. There are 0 failed transactions which are really good!
W3 Total Cache and WP Super cache are giants and majority of the WordPress sites are powered by these plugins.
In next three test cases, we are going to use plugins that are popular but contains fewer and most basic options. It does not mean they won't perform well.
Test case: WordPress with WP Fastest Cache
WP Fastest cache is not a huge plugin, but it's one of the most popular caching plugins. It will provide you with all the basic settings you need to configure at one place. The options are easy to understand, and a plugin is very easy to configure.
WP Fastest Cache is also recommended if you just want to get going! Here are the results we got after sending 300 concurrent visitors to the homepage.
- Transactions: 23203 hits
- Availability: 100.00 %
- Elapsed time: 119.76 secs
- Data transferred: 179.66 MB
- Response time: 1.03 secs
- Transaction rate: 193.75 trans/sec
- Throughput: 1.50 MB/sec
- Concurrency: 198.60
- Successful transactions: 23203
- Failed transactions: 0
- Longest transaction: 6.37
- Shortest transaction: 0.00
As you can see, the number of transactions is still higher than WP Super Cache, and the Longest transaction is comparable. It means, with basic settings, It has everything that W3 Total Cache but with WP Fastest Cache, our Server was able to serve more requests.
The site performed really well under pressure too! Here is the Pingdom report of the site when it was receiving 300 concurrent visitors.
The load time is comparable with WP fastest cache. Now let's check how it performed for the post page.
- Transactions: 22882 hits
- Availability: 100.00 %
- Elapsed time: 119.34 secs
- Data transferred: 182.29 MB
- Response time: 1.04 secs
- Transaction rate: 191.74 trans/sec
- Throughput: 1.53 MB/sec
- Concurrency: 199.05
- Successful transactions: 22883
- Failed transactions: 0
- Longest transaction: 7.69
- Shortest transaction: 0.01
In this case, too, It's better than WP Super Cache! Longest transaction time is a bit higher than WP Super cache but not so much.
You can go with WP Fastest cache for niche websites with higher traffic. One of the niche websites I owned had WP Fastest cache, and I love the simplicity of this plugin.
The last two plugins are not so popular, but we included those plugins for this article as those plugins are recommended by many blog posts.
Test case: WordPress with Comet Cache
I used this plugin for the first time and had a hard time figuring out the necessary settings. It just had on/off option for the overall caching system. I just enabled it and here are the results I got for the homepage.
- Transactions: 2141 hits
- Availability: 100.00 %
- Elapsed time: 119.36 secs
- Data transferred: 19.06 MB
- Response time: 15.02 secs
- Transaction rate: 17.94 trans/sec
- Throughput: 0.16 MB/sec
- Concurrency: 269.50
- Successful transactions: 2141
- Failed transactions: 0
- Longest transaction: 18.27
- Shortest transaction: 0.54
Not so good. It looks like it's failing even to create cache properly. To make sure there is no mistake from our side, We made sure that plugin is saving all the settings successfully and then tweaked some settings to see if it shows some changes.
Here are the results for Post page.
- Transactions: 2727 hits
- Availability: 100.00 %
- Elapsed time: 119.54 secs
- Data transferred: 25.30 MB
- Response time: 11.88 secs
- Transaction rate: 22.81 trans/sec
- Throughput: 0.21 MB/sec
- Concurrency: 271.04
- Successful transactions: 2727
- Failed transactions: 0
- Longest transaction: 15.41
- Shortest transaction: 0.48
It showed us some improvement, but it's nothing if you compare results with other caching plugins. Here is how the site performed under pressure with Comet cache.
Overall, Comet cache is hard to understand and does not have a dedicated page containing all the necessary options a newbie user wants to enable. It also does not have a clean user interface to work with.
So, Only one plugin is left! Let's test the last plugin from the list and conclude later!
Test case: WordPress with Cache Enabler
Cache Enabler is simple as its name. But it's very useful! I never used Cache Enabler before this test, and I can say that this WordPress Caching plugin is actually Impressive. Here are the results we got when we sent 300 concurrent visitors for two minutes on the homepage.
- Transactions: 26805 hits
- Availability: 100.00 %
- Elapsed time: 119.58 secs
- Data transferred: 225.45 MB
- Response time: 0.82 secs
- Transaction rate: 224.16 trans/sec
- Throughput: 1.89 MB/sec
- Concurrency: 182.72
- Successful transactions: 26812
- Failed transactions: 0
- Longest transaction: 4.99
- Shortest transaction: 0.04
The Longest transaction time is very good! It's better than all other caching plugins we have tested in this article. Something odd about this plugin is its performance on inner pages like posts and pages. Here are the results with 300 concurrent visitors on a post.
- Transactions: 20704 hits
- Availability: 100.00 %
- Elapsed time: 119.37 secs
- Data transferred: 179.89 MB
- Response time: 1.19 secs
- Transaction rate: 173.44 trans/sec
- Throughput: 1.51 MB/sec
- Concurrency: 206.06
- Successful transactions: 20712
- Failed transactions: 0
- Longest transaction: 5.64
- Shortest transaction: 0.01
As you can see, the difference between transactions on homepage and transactions on posts page is very high. It's not the case with other plugins. Overall, Cache enabler is simple and awesome caching plugin. A test website performed well when it was under the pressure of 300 concurrent visitors.
Load time is not as good as W3 Total Cache, but it's really good. So, we have results! Next thing we have to do is to conclude based on these results. All the caching plugins we tried are excellent and must be listed as a recommended ones as they are.
Conclusion
WordPress has lots and lots and lots of caching plugins. But it's vital to select the one which fits your needs the best. Caching plugins are also the kind of plugins that should take care of security the most!
As the cache is being served to all the users, the hacker needs access to your cache to advertise their fancy name on your website, Not even your database. So, it's better to use tested and proven caching plugins over new ones.
From this list, W3 Total Cache looks best if you have a long-term website and you are expecting constant improvement in some page views. It has many advanced settings that you can configure as your site grows more prominent. WP Super cache can also be used for the same purpose.
I won't consider using Comet cache on my projects. However, I would love to use Cache Enabler and WP Fastest cache on small websites with high traffic. For instance, If you have a site with 40-100 articles and you are getting 5-50k pageviews a day.
So, you can decide on your own now as you have our suggestions and results in front of you. If you have questions, Comment down in the comment section, and we will help you solve the questions. Subscribe to our newsletters to continue getting notified for this type of articles.