We love Satollo and loved Hyper Cache (we’re longtime paid users and supporters of his Newsletter technology as well). Strangely, sometimes good developers do bad work. The latest version of Hyper Cache (version 3) is a prime example of what can go wrong with rewrite upgrades.
Since we were struggling with Hyper Cache we decided to take a look at WP Rocket (enjoy 20% off with that link) who is the hot new caching kid on the WordPress block. Sadly WP Rocket is not a good replacement for us for now. We test and compare Hyper Cache and WP Rocket below.
What’s suddenly so wrong with Hyper Cache?
We liked the version 2.9.1.6 a lot. It performed wonderfully for us for two years (we tested and rejected W3 Total Cache and WP Super Cache for configuration/performance issues before settling on Hyper Cache). Satollo decided he wants to merge the features from his other caching plugin (Lite Cache) into it.
All of that sounds fine, however there are both upgrade issues and installation issues, as well as performance issues (requests with query strings).
Upgrade issues
Upgrading from version 2 (2.91.6) to version 3 (3.1.0) breaks the caching and there is no notice about it. The notice only appears on the Hyper Cache settings screen saying:
“You must save the options since some files must be updated”
Hyper Cache post-update warning
As we maintain dozens of websites and have built hundreds of websites, this is truly disappointing. It means we can’t just upgrade the plugin automatically, but somebody must go through the sites and put in the correct settings.
There is an “Import Options” button, but it doesn’t import all the settings properly, so watch out for these!
- Cookies to bypass – it will import the data, but will not enable the option (mean your WPTouch Pro desktop switch won’t work!)
- Do not cache the blog main feeds – in previous version this was on by default
- Don’t serve cached pages to comment authors – in previous version this was on by default (means commenters won’t see their comments as pending moderation)
This means we have to update the plugin manually on all the websites and 99% of our client’s can’t do it on their own.
More complicated install
Installing a new copy of the plugin now involves extra step – following option needs to be enabled for a good commenter experience on your website:
- Don’t serve cached pages to comment authors
- You need to turn this one off, otherwise commenters won’t see their comments as pending moderation and they will think your website is broken.
- Commenter posts the comment and comes back to the same page where he left the comment – no evidence that the comment was accepted.
On the positive side, Hyper Cache now allows you to cache HTTPS and HTTP versions of your website separately. Although we recommend you redirect HTTP to HTTPS all the time.
Performance Issues: Query Strings
Due to the unfortunate assassination of a dozen French cartoonists (evidence points to yet another false flag attack), a client’s political analysis sites was facing over 300,000 visitors/day. We faced some performance issues on the server and were able to see the latest Hyper Cache under real stress. What we noticed is that many non-cached requests had query strings attached (i.e. client.com/2014/postname.html?utm_source=dlvr.it&utm_medium=facebook). The older version of Hyper Cache – 2.9.1.6 – the last one we liked has a setting to include the pages with query parameters in cache
WP Rocket also allows us to set which query parameters don’t play role in cache (http://wp-rocket.me/changelog/ — “Cache URIs with specific query strings variables (Advanced Options)”) – the ones above are for Google Analytics which runs in JavaScript, so it should be able to check it as long as the cache plugin won’t redirect the URL to one without query parameters, it should only serve its HTML
Performance Issues: Cache Control from Bots
Another five percent of uncached pages were being sent uncached due to an HTTP_CACHE_CONTROL header setting of “no-cache”. Bingbot user agent for example likes to send spurious “no-cache” requests. Hyper Cache 3 is written so that it only accepts this header for real visitors, not bots, but it clearly doesn’t detect Bingbot properly. For the moment, Hyper Cache 3 only recognises googlebot as a bot! The older version of Hyper Cache – 2.9.1.6 has a setting to ignore bots requests for uncached pages. Satollo, please allow website owners to decide if they want to recognise “no-cache” headers or not. There’s too much scope for abuse.
WP Rocket – Mobile disappointment
We’d heard very good things about WP Rocket, so we checked it out full of hope in our developer hearts. Perhaps WP Rocket could be the cache plugin of our choice.
No mobile caching
This plugin can’t cache a separate version of your website for your mobile visitors. So if you are serving a separate theme to your mobile users (such as WPTouch Pro, as fully custom responsive themes require a ton of work) you can only disable the cache for these users and hope they don’t crash your site by large traffic.
Caching advice (c) WP Rocket
A feature like this should not be hard to implement. All what needs to be added is a list of user agents which should get to the mobile caching.
Thankfully the mobile caching has been added in version 2.7 released on 11 March, 2016!
The ideal situation would be ability to create more independent caching groups which could depend on cookies. We are creating a mobile framework for effective image and content serving for mobile, tablet, retina and desktop devices, so a feature to cache each one independently would be awesome.
So we would like to see a configuration option where you name the caching group and then enter what cookies determine the device falls into this group as we detect if the device is mobile, tablet or a desktop, then detect retina and store that in a cookie.
On the positive side, WP Rocket contains a nice combine feature for your JS (which sadly doesn’t support wildcard masks) and CSS. The Lazy Loading for images works nicely as well if you prefer that. It’s nice to have it all in one plugin.
If WP Rocket would include solid mobile caching configuration, WP Rocket would be our caching plugin of choice. Some good news: for purely responsive sites coded to tread lightly, WP Rocket is ready to go as is. For the moment, though, such sites are a small minority.
Hyper Cache vs. WP Rocket
We run the test on our Linode VPS server which we keep for this kind of purposes. It has Linode 1536 (that’s 1536MB of RAM) and runs NginX, MySQL and PHP5-FPM.
We found no difference in the performance between the two plugins. Following graphs show us how the load time changes depending on number of concurrent page loads using Load Impact (the differences are marginal):
WP Rocket
Hyper Cache
Following graphs show us what was happening on the server. Was it busy processing the PHP code? No, not at all, the server was virtually idle. We found that using htaccess with WP Super Cache in Apache is far worse.
WP Rocket (first bump) vs. Hyper Cache (second bump)
Finally let’s compare the traffic to make sure it was all real. Both plugins served the same amount of data.
WP Rocket (first bump) vs. Hyper Cache (second bump)
Conclusion
For core caching both WP Rocket and Hyper Cache are great. In terms of putting together a usable and resilient configuration, the new Hyper Cache is a step backwards and we continue to recommend older Hyper Cache 2.9.1.6 as the caching plugin of choice. WP Rocket shows some real potential and we’d like to step up to pro caching and pro support as soon as their developers sort out mobile caching. We cannot recommend Hyper Cache 3 as it is a real step backwards. W3 Total Cache and WP Super Cache continue to face the same issues with configuration and stability (W3 Total Cache) and performance/server load (WP Super Cache) so we continue to use both Hyper Cache 2.9.1.6 and WP Rocket.
Martin Viceník
Martin graduated as an engineer in Computer Science from Slovak Technical University in Bratislava. He grew up in Liptovský Mikuláš in northern Slovakia next to the beautiful Tatra mountains. He is the developer behind our FV Player.
Hi, Thank you for your review :)
Regarding to mobile, creating specific caching versions per device is in our roadmap : trello.com/b/CrUcz6Jy/wp-rocket-roadmap
Mention in the review that adding a regex will break your website, worth to mention :)
Hi Andrei,
Would you care to share some additional detail and context?
Thanks.
Спасибо за интересную и полезную статью! Мне понравились ваши советы и рекомендации.
This is a rare post that actually give me somethings when I search on the net for a cache plugin.
I tested WP Rocket currently and the result is good but sometime, I faced issue that cache deleted automatically which cause performance issue. I did get in touch with support but after a few emails exchange and ask for some details, they stop response, I’m going to ask for refund!
That’s why I want to test out Hyper Cache, but is the version Download Version 3.2.2 good to use? There have some updates on the plugin since the time you post this.
Thank you for your recommend.
Hi Hoang,
I’m sorry to hear that WP Rocket support is not very supportive.
We’d recommend using Hyper Cache v. 2 as it’s more reliable.
Let us know how it goes!
Hi Alec,
Thank you for your response.
I went ahead and install 2.9.1.6. The way it handle the server load is amazing and it work for us.
Unfortunately, I notice an issue, when I publish a post, or edit and save a post, or just schedule a post, it take around 20 second for the page to load and the server load spiking from 5 to 20! Is it something normal when using the plugin?
Thank you.
Hi Hoang,
It sounds to me like you have issues with your server. If both WP Rocket and Hyper Cache 2 (the most reliable caching plugin we know) have trouble working properly then there’s something very strange. We offer Pro Support incidents for quick help although a single incident might only cover diagnosing the main issue in this case, depending on the severity. Really you should speak to your server admins/hosting company.
Making the web work for you, Alec
What I like about WP Rocket is that it’s very good at serving static content. As you know up to 70% elements are static.
Hi Gulshan,
I think your comment was probably more comment spam than a serious evaluation but just in case…
I take issue with your perpective that static resources are the most important part of a WordPress caching plugin. Any good host should be able to serve static resources well: heck add a simple CDN if you want. WordPress caching plugins are there to deal with the dynamic elements.
Hi Alec, Thank you for your recommend. I will go for Pro Support incidents to recheck the server just in case. Thanks.
Hey Alec, I was just wondering if you have heard or worked with WP Super Simple Speed before. It’s newer and lightweight and I would like to know if you may of heard of it before I install.
Thanks
Hi Ryan,
Haven’t tested WP Super Simple Speed yet. Lightweight is always nice. The key feature now is caching for multiple devices (mobile and desktop). Most of the caching solutions out there not only don’t cache mobile but actively make it difficult for us to code an add-on solution.
Let us know how your test goes.
Hi,
You mention that WP-Rocket cannot cache Wptouch Pro requests
Did you know that WPTocuh Pro has its own caching extension called “Infinity Cache” Wouldn’t this resolve the mobile caching issue you talked about?
Hi Colin,
Thanks for the tip. We’ve done a fair amount of work with Infinity Cache.
Running two caching systems is far from ideal (double the management overhead). It would be much better if WP Rocket could really handle mobile full flegedly itself. We hope they will get around to it sooner rather than later.
Hi Alex
It looks like WP rocket have implemented dedicated mobile cache which works with WP Touch. Have tested without Infinity cache and works well. Let me know your thoughts,
WP Rocket supports HTTPS, mobile caching, DB optimization, most CDNs, as well as being able to purge Varnish and OPCache.
wp-rocket.me/faq/ blog.wp-rocket.me/2-8-ilum/
Hello Luke,
I updated the information about that now.
Currently we are facing issues with WP Rocket Minify – it just doesn’t work for some min.js script files and nobody knows why. I even talked to them on WordCamp Europe.
Thanks, Martin
I’ve been using WP-Rocket. Its resulted in the most gains. (of course not free)
Also stopped using Hyper Cache, a good alternative is… Cachify.
Thank you thank you for this! I agree Hyper Cache 2.9 was the best caching plugin, and I combined it with DB Cache Reloaded Fix to give it an extra boost.
When I first updated some of my site from Hyper Cache 2.9 to 3, I immediately received a notification from my host of CPU Overload causing my sites to be taken down, which was strange.
Then I did a test of saving one backup of Hyper Cache 2.9, then updated all the sites to Hyper Cache 3 and see a couple what the CPUs were, and it was pretty high. So then I reinstall a backup of Hyper Cache 2.9 on all the site again, and behold the CPU went down.
So yes, in 2016, I’m still using Hyper Cache 2.9, even though the need to update notificaiton for annoys, but it’s still best option combing Hyper Cache + DB Cache Reloaded Fix
Hi Hayden,
We use WP Rocket these days but there are some really disappointing aspects.
So if someone has not jumped on WP Rocket, I have to say JJ’s solution is pretty good. We wanted to outsource our cache plugin development (we decided writing caching routines wouldn’t be the core of our business). WP Rocket is a mixed experiment (quite a few of our requests have been implemented but with a long time lag).
Proper caching should be free and part of core WordPress. Complex caching is just another hoodwink and torture the WordPress world imposes on helpless end users. What good is free and open source if the key features aren’t in the box or require an IT degree to implement properly?
Caching plugins pretty much all do the same thing and are not always an appropriate solution for high traffic sites because they rely on PHP unless you use mod_rewrite or a custom nginx configuration. When you start to hit high volumes of traffic you really should be looking at a server-side caching solution like an nginx proxy cache or Varnish both or which blow these basic caching plugins out of the water.
I have really mixed feelings about WP-Rocket. In most cases it seems to run pretty well and give you some significant speed advantage but in a lot of cases it appears to be highly unreliable and even risks your SEO. It appears you also have to try really hard to get a refund. So it is once more a situation where one like to try it out if works and then make a purchase decision. WP-Rocket does not offer this. Buy or die… Or you could null it yourself following these instructions: (link removed)
Worked for me and I will see, if I get a license when I am fully convinced…
Hello Marc,
could you please post about what reliability issues you had and what SEO risk occurred? How did the support staff react to your requests?
In general we like to work with them. What we didn’t like lately is that the 404 errors are not getting cached and the plugin authors are not going to improve that. So if you have a post with 2 broken images and each one generates 404 error handled by WordPress you might get your server overaloaded. Making sure WordPress is not running to server 404 errors for the static files would help though, but it’s sad the WP Rocket doesn’t take care of that and doesn’t cache the 404 errors.
Thanks, Martin
Hello, Martin,
2 years gone since the article was posted. What can you say about the current Hyper Cache? Do you still use it? Or does it become worse and worse? I used Hyper Cache for a while but after last update my users do not see the comments they wrote. I did not touch any settings moreover I can not fixed this problem out :(
Thanks, Tatiana
Hello Tatiana,
I didn’t had a change to test it lately. We are mostly using WP Rocket these days or the old reliable Hyper Cache version.
What’s good about WP Rocket is that it stores cache files in such way that NginX rewrite can take care of cache serving. Also the cache purging goes through some filters, so we were able to implement a cache purge queue for it – making sure the homepage is not purged too often.
The downside is that by default it purges the cache too often and there is no setting for it, so we are suggesting improvement to WP Rocket team for that: github.com/wp-media/wp-rocket/issues/478
Thanks, Martin
I’m also using Hyper Cache 2. I want to use WP Rocket but the purging is annoying. Has this been fixed?
Thanks!
Thanx for a detailed discovery. Btw, a combinations of cache plugins can be used. I found a good plugins comparisons (s-sols.com/wordpress-site-response-time-optimization) with Rocket and Hypercache as well.
Hello Paul,
what’s the idea behind that? I wouldn’t go for that as it adds a lot of complexity to the setup. I couldn’t find any that combination in your article either.
What I strongly recommend is to use a WP cache plugin for the persistent cache and NginX Microcaching to prevent race conditions when a page is purged from a cache. The problem with WP cache is that it takes some time for it to store the cached HTML (0,5 – 1 second) and it has no mechanism to serve the expired page. That way you can get a spike of uncached hits every time the cache is purged. Microcaching really helps with that.
Thanks, Martin
The idea is to combine several plugins e.g. s-sols.com/wordpress-site-response-time-optimization#lscache_hcext_autoopt_subc to get all functionality without buying.
Put to cache – it’s ‘one time’ operation and it’s not so important. Furthermore, expired page will be got again from the engine. What’s the problem?
Hello Paul,
the race conditions when storing a cached page occurs when you edit some article and you are getting a lot of visits on it. Imagine you get 100 requests every second and then suddenly the cache is purged by your edit – the WP cache plugin has no cache file to serve, so it accepts the first request and starts generating the page for it to store it in cache. However this can take something like 1 seconds, so all the other 99 requests in that second still have no cache file to load. So that way you get a spike of uncached hits. The key is to mark the cache entry as expired and generate the new version in background. Or use NginX Microcaching. I image the Litespeed cache is similar to that.
Thanks, Martin
Yes, I see the problem, but how does it influence in total server load? Ok, our first 100 visits in first 1 second will get uncached page and server has to generate it 100 times. But after that it will get it from cache million and million of times and wont load server. Influence of that spike doesn’t seem like huge. What do you think?
Hello Paul,
issues like that can quickly escalate into a state where the PHP can longer access SQL quickly enough and fails to generate the cache file – meaning a complete server meltdown. We had that happen before and Microcaching really helped.
I was wondering if this aspect is compared in that article.
Thanks, Martin
Useful experience. I’ll keep it in mind.