Last week I found out that many WordPress hosts ban many of the most popular plugins from their users. Most of these plugins are Related Posts plugins. I guess they are afraid of excessive database usage. However I myself was interested in this topic as I already made one related posts plugin myself, called Related Posts Lite.
Before you continue, please note, that this is only a server side performance review on one single server. This might differ on any server with different plugins and configurations. In this experiment every plugin is treated equally in terms of layout and usability – thus the review only takes the performance into account, nothing else.
I know, that most of you would say, that I should have used the P3 performance profiler plugin, but it simply felt more exciting to create my own method, which I know it won’t interfere with the results. I made a very simple PHP class, which is inserted into the themes functions.php file. That’s it. It outputs then some basic data to the bottom of the screen in a table format.
You can get the class code here: http://pastebin.com/7vRrGAKp
A few lines of CSS for the exact same table output: http://pastebin.com/sfKnr9rH
For the test environment a made a fresh new WordPress install on my local test server and loaded up a few things first.
- I’ve installed a few popular plugins, namely: Akismet, BBPress, Jetpack, WordPress SEO and Shortcodes Ultimate
Why? Simply because most of the WordPress sites use at least 4-5 plugins, so it feels more realistic.
- I’ve made 1000+ (1040 precisely) dummy posts. Some with thumbnails and real content. That’s a pretty nice amount to start with.
Before anything, I picked a random post and measured the average performance of the server by refreshing the page 20 times.
This average tare performance will be starting point to compare the plugins with. If the class I created is instantiated with the “core” string paramater, it stores the upcoming data as “default”, “tare”, “core” data – thus the environment speed without any further plugins activated. Thus the initialization is the following:
$o = new measureUsage('core');
What’s measured, and how?
The script outputs the:
- Load time – the time the plugin ran
- Memory consumption – the peak memory consumption of the plugin
- PHP ticks – this actually won’t tell much, an approximation of the script length
- Database queries – the number of queries forwarded to the mySql database
However, the most important factor in these tests is the Load time and the number of Database queries. This test however can’t measure the server usage – one needs more powerful tools for that.
Steps of the test:
- Picking a random page
- Activating the plugin to be tested
- Configuring the plugin to show thumbnails and 20 related posts
- Modifying the class code as following:
$o = new measureUsage('some_phrase_which_identifies_the_plugin');
- Sampling: Refreshing the picked page 20 times
Why the same page 20 times you ask? It is because I wanted to see how the plugins react to an initial and repetitive page view. I was expecting that some of the plugins will use a cache after the first page view, so the repetitive page views will be faster.
This test was performed on the following plugins:
- Related Posts Lite (yes, I’m testing my own plugin as well 😉
- Related Posts by Zemanta
- Contextual Related Posts
- Easy Related Posts
- BestWebSoft – Relevant
All of these plugins are FREE and accessible via the wordpress plugin repository. Most of these are banned on many wordpress hosts, let’s se why.
For the output I picked two very important calculations.
- The overall average plugin load time, relative to the core load time
- The average plugin load time after the initial hit (thus after the first page load)
Both values are in per cents, indicating how much of the page load time is taken by the plugins – the lower the better.
Let’s see how the test went. Some results are quite interesting.
As I said before, first things first, measure the core performance. After doing the 20 refresh pages I got the following results:
So the average page load is 0.179 seconds, the memory consumption is 17.5 mb roughly and 67 database queries were executed. These values will be subtracted from the ones the program is going to measure with each related posts plugin activated.
Yet Another Related Posts Plugin (YARPP)
This plugin is very very popular. It’s been around for over 4 years now. Let’s take a look at the values.
- Stable, low query count (11) – but since the first pageload has the same query count as the others, it means there is no cache
- Decently low load time and memory consumption
- ~20% average plugin load
- I would rate this plugin STABLE and FAST
- I would recommend it on websites with medium to high bounce rates (lots of unique visitors, less page views)
Related Posts Lite
I will try to be as impartial as I can with my own plugin 😉
- Very low average query count (4)
- The average plugin load is similar to YARPP (20%), but because of caching the plugin load is ~6.13% on repetitive pageloads
- ..because of that the first hit takes too much time
- The peak memory usage is also lower then YARPP
- I would say the plugin is STABLE, but SLOWER on first page hit, yet EXTREMELY FAST on repetitive page hits
- I would recommend it to websites with very low to medium bounce rates (lots of page views)
Related Posts (by Zemanta)
This is also a very well known and high rated plugin. Let’s see how it performs.
- Very high database query count!! It uses a cache, yet the average query count is ~48
- The load time and the memory consumption is acceptable.
- The plugin load is much higher, than it was with the previous plugins ~31%
- … and it’s not much lower on repetitive page loads either (despite of the caching)
- I would say the plugin is STABLE but it’s SLOWER and uses TOO MANY QUERIES
- I would still recommend using it, but the high number of queries indicates it needs optimizations
Contextual Related Posts
This plugin has surprised me a lot. Well done.
- The initial page load uses 87 queries and it’s a bit slow, but highly acceptable
- Repetitive page loads are extremely fast and only uses ONE query!
- The average plugin load is also extremely low ~9.1%
- ..and the repetitive is even lower ~5.2%
- This plugin looks STABLE and EXTREMELY FAST in almost every situation, well done!
- Highly recommended!
Easy Related Posts
I actually measured this plugin twice, because I though the results were inaccurate, unfortunately not.
- Very high average load time and high memory consumption
- Very high plugin load percentage ~56.2%
- Definitely no caching implemented
- However the query count is decent
- I would say this plugin is STABLE but VERY SLOW, it needs optimizations
- I would rather recommend using an alternative
BestWebSoft – Relevant
This team has got some nice plugins on the market. Let’s see how they perform.
- Very similar results to YARPP with the ~22% average plugin load
- Acceptable query count, but definitley does not use a cache
- Low memory usage
- I would say this plugin is STABLE and FAST
- I would recommend it
Every plugin was able to handle the test environment one way or the other. For better view, here is a performance chart of the measured values (the lower the numbers, the better):
This is my honest opinion of the plugin performances:
- Best Performance: Contextual Related Posts
- Very Good Performance: YARPP, Related Posts Lite, BWP Related Posts
- Acceptable Performance: Zemanta Related Posts
- Poor Performance: Easy Related Posts
Please note again, that these performances are based on this method. Different test environment and a different method might give you completely different results. This is just an insight based on my method.
Sources and Stuff
- Useful WordPress functions & Resources: WordPress cheatsheet for bloggers
- Performance measuring class: pastebin.com/7vRrGAKp
- Custom table styling: pastebin.com/sfKnr9rH
- Exported content from the test environment: Sample Data
- Charts made by: onlinecharttool.com
- Full measurment data gallery: imgur.com/a/qbLYL
How about the related posts part of Jetpack? My unscientific testing is that it seems to run pretty quickly and has little overhead.
Oh my, how did I forget that one. I guess I need to test that as well. Thanks for reminding me!
When came the update for Jetpack Related Posts?
Probably later today 😉
I like NRelate, I can have related posts from my other sites on it, really good for driving cross traffic. Good article! Thanks
+1 for jetpack but just for curiosity
unfortunately jetpack is such a monstrosity of a plugin that no one in their right mind who is aware of performance issues or optimization would ever use it
Pingback: Weekly Roundup of Web Design and Development Resources: November 6, 2014
I enjoyed your testing article, nicely done!
I’ve spent much of the week optimising a high traffic (100k visitors per month) website for page load speeds. As your article shows, plugins use server resources in different ways. Some have a severe negative impact on both site and shared server performance. There are several Related Posts plugins that have been banned by some hosting companies because of that…
When optimising page load times, both overal page sizes and the total number of queries or requests contribute to the speed ratings. GT-Metrix.com provides an excellent overview of page size, load speed, requests, and gives Page Speed and YSlow scores.
In this real world example, even the footprint of externally indexed and served related posts can exceed 300k of page size (Shareaholic). Jetpack with only Related Posts and social media “Like” buttons activated exceeded 300k and generated lots of additional requests.
I found that the absolute BEST combination of Related Posts and Like buttons was your excellent and feature-rich Related Posts Lite plugin in conjunction with the Social Media Feather plugin. The two of them barely registered any increase in page size or requests!!!
As an example, the asian-recipe.com/tibet/tibetan-meat-dishes.html page load stats from GT Metrix is now;
– Page load time: 2.59s
– Total page size: 294KB
– Total number of requests: 23
The site has 32 active plugins running… When I started optimising load times on Monday, page size was 2.5 Mb and 137 requests were being generated! It was using WP Super Cache plugin with mod_rewrite option, and preload activated. The improvements are primarily due to using;
– P3 Plugin Profiler to identify the greedy plugins
– replacing them with slimmer plugin options
– replacing WP Super Cache with W3 Total Cache
For more information, there’s a new post on my site at:
I really appreciate reading this thorough report. I just finished a review of many of the most popular related posts plugins (in light of the fact that nRelate is being discontinued), but don’t have the knowledge for running those kinds of tests. I really appreciate your attention to detail. I just hope you add performance reports on a few more, now that everyone’s searching for the best related post plugin option (again).
Would you consider trying out Content.ad as well? Gretchen (above) included our plugin in her review as well, and I would be interested in your thoughts on how it performs. All site indexing takes place on proprietary servers, and the widget itself loads asynchronously. If you’re interested, you can find our plugin here: https://wordpress.org/plugins/contentad/. Thanks!
Great article, BUT unfortunately you shouldn’t recommend Contextual Related Posts.
The reasons is that it’s “extremely database intensive”. I installed it and got a notice from my host that it’s one of the banned plugins: http://wpengine.com/support/disallowed-plugins/
I will try out Related Posts Lite now.
Well, they have a valid point on one side. The initial query takes 87 database queries. That is high indeed, especially if someone has a site with 1000+ posts. On the other hand handling the same page to another visitor only takes 1 query, which is impressive.
I’m not sure if wpengine will allow any related posts plugins. Each and every related posts plugin needs certain amount of resources to serve proper results. The more relevant results, the more database sensitive the queries get – there is no way around this.
I have some very bad experiences with wpengine users. Don’t get me wrong, they are offering a nice service for those who want a one-click solution, but the price is the extremely limited resources. Their customers tend to buy premium plugins from various vendors, but half of these won’t work properly, because of the server limitations. Same goes with dedicated hosts as well.
For instance, I moved from a certain big host last week. I was paying 40$/mo for a 2 core 2gb ram managed VPS service and it was having issues on a monthly basis. The price sounds fair, but the managment sofware (CPanel/WHM) took too many resources. Then I moved to Digital Ocean. Big change, lot of pain, because it’s unmanaged (meaning I have to install everything from a SSH command line). Took me a day and a half to get it right the first time. However the current server specs are 1 Core 1gb ram and it’s running 3 times faster than the other one, and the price is only 10$/mo.
Bottom line, please don’t expect much from any plugin on wpengine. They have limited resources in exchange for an easy to use service. Majority of plugins needs more resources (freedom) than that. I wouldn’t be surprised if they banned Related Posts Lite as well in the near future.
Pingback: Whose wordpress related posts plugin is fastest – Wordpress Related Posts plugins Performance Tests and switching from Zemanta Wordpress Plugin to Contextual Related Posts | Share Knowledge Liner
Hi, I am the author of Contextual Related Posts. Thank you for your review and the performance stats. Contextual Related Posts has an inbuilt cache which is why the performance leaps on reloads. If you make a post and visit it yourself, there is a high possibility that visitors won’t see the initial pageload at all!
Regarding WP Engine, they have banned this an many plugins because of the FULLTEXT index being created. They remove the FULLTEXT index automatically, so the plugin wouldn’t work.
I have been informed (but not verified) that you could request a change to a server that runs mySQL 5.6 which using innoDB and has FULLTEXT support.
I recently published my related content plugin here https://wordpress.org/plugins/sebar/. It has a lot of cool feature like:
1. Mobile responsive with support swipe and mouse drag
2. Browse YouTube videos from plugin dashboard
3. Integration with Google Feed Finder
4. Display related contents from internal WP Post based on (individual post/page, tag, category, author and custom query)
6. Custom landing page
Hopefully it can help someone out there.
Thank you for sharing the code, I think I would like to test my own plugin.
Hi Ernest, it would be great if you could review Bibblio’s new plugin too: https://wordpress.org/plugins/bibblio-related-posts/
We’ve worked hard in particular to make sure that performance is high and that it’s not database heavy. Add that to flexible placement, Bibblio’s always improving AI algorithms for choosing recommendations, and really stylish design (well we think so!) and we hope it’s a neat new option for people looking for an RP plugin. Thanks!