Benchmarking WordPress plugins
While doing routine tuning and checking of my weblog, I discovered a rather nasty slowdown with WordPress page generation. Taking the “scientific” route, I deactivated nearly all non-essential plugins in my Supercharged weblog (more than 40) and proceeded to activate them one by one, interspersing activations with ApacheBench tests.
A short plug: This post is brought to you by Supercharged. If you want to get these plugins in one package, consider getting Supercharged for your blog.
Really quick conclusions:
- WordPress (with the baseline plugins installed) is slow. On my server (not exactly the fastest thing in the planet, but dedicated to Web and database serving, and not bound by swapping or memory limits), it can’t pipe more than 1.5 front page views per second. I don’t think the load from ApacheBench accounts for more than 10% of the CPU usage.
- Do not install My Tube under any circumstances. Further investigation is pending.
- These plugins add negligible amounts of overhead. None of the plugins (except for My Tube) added detectable performance losses.
- bsuite seems to introduce a small slowdown.
The chart above shows the (rather unscientific, but effective) results of my short benchmark, in a nice bar chart (the taller, the better). This table represents the average KB/s for page generation after activating each plugin. Note that plugins were never deactivated after beig activated (except for My Tube, which I kicked out of the circuit). Thus, in a perfectly repeatable test scenario, you should see a ladder in the bar chart. Since you don’t see one, I can conclude that stacking my 40 plugins introduces negligible page generation performance overhead.
Caveats:
- I started with a plugin baseline of Akismet, Fold Page List, Fold Category List, PHP Markdown Extra, Redirectify, Software shop for WordPress, del.icio.us widget, Sidebar Widgets, WordPress allow dashes, WordPress AutoLink, Permalink redirect. There’s simply no way I can afford to turn these off in my live site.
- I hit my site with 100 requests using
ab -n 1000 http://rudd-o.com/executing on the Web host. Whenever I saw dramatic performance drops, I checked to see whether the load average was high, then waited for all other running processes to finish, and then re-tested - As you can see, I only tested front page views.
- The base WordPress installation is a vanilla 2.0.3 + bug fixes setup. No caching options were modified or set.
- This is not a scientific test. Standard deviation is not reported. Since I was only looking major performance drops, minor differences (+/- 0.1 requests per second) can be accounted for the fact that tests were performed on the live site. Yes, that includes apparent “performance boosts” with some plugins active.
- Plugins that add template tags or widgets were added to the template/widget configuration for accurate representation.
- This benchmark does not measure page responsiveness or ancillary object loading times (JavaScript, images)
Here is the collected data:
baseline: Akismet, Fold Page List, Fold Category List, PHP Markdown Extra, Redirectify, Software shop for WordPress, del.icio.us widget, Sidebar Widgets, WordPress allow dashes, WordPress AutoLink, Permalink redirect:
Requests per second: 1.56 [#/sec] (mean)
Time per request: 642.467 [ms] (mean)
Transfer rate: 50.06 [Kbytes/sec] received
add: Canary Comment
Requests per second: 1.54 [#/sec] (mean)
Time per request: 649.238 [ms] (mean)
Transfer rate: 52.48 [Kbytes/sec] received
add Cache-Flush
Requests per second: 1.58 [#/sec] (mean)
Time per request: 634.240 [ms] (mean)
Transfer rate: 53.72 [Kbytes/sec] received
add Creative Commons Configurator
Requests per second: 1.54 [#/sec] (mean)
Time per request: 648.789 [ms] (mean)
Transfer rate: 54.52 [Kbytes/sec] received
add: Digg This
Requests per second: 1.47 [#/sec] (mean)
Time per request: 678.475 [ms] (mean)
Transfer rate: 52.13 [Kbytes/sec] received
add: Days Since Birth and Gravatars
Requests per second: 1.49 [#/sec] (mean)
Time per request: 669.963 [ms] (mean)
Transfer rate: 52.82 [Kbytes/sec] received
add: Inline ajax more
Requests per second: 1.67 [#/sec] (mean)
Time per request: 597.525 [ms] (mean)
Transfer rate: 61.60 [Kbytes/sec] received
add: In Series
Requests per second: 1.41 [#/sec] (mean)
Time per request: 707.612 [ms] (mean)
Transfer rate: 52.02 [Kbytes/sec] received
add: iG:CoComment
Requests per second: 1.61 [#/sec] (mean)
Time per request: 621.901 [ms] (mean)
Transfer rate: 59.19 [Kbytes/sec] received
add: Bread Crumb Trail Generator
Requests per second: 1.60 [#/sec] (mean)
Time per request: 623.195 [ms] (mean)
Transfer rate: 59.47 [Kbytes/sec] received
add: LMB^Box FilePress
Requests per second: 1.55 [#/sec] (mean)
Time per request: 646.917 [ms] (mean)
Transfer rate: 57.29 [Kbytes/sec] received
add: LMB^Box Comment Quicktags
Requests per second: 1.73 [#/sec] (mean)
Time per request: 577.145 [ms] (mean)
Transfer rate: 64.21 [Kbytes/sec] received
add: My Tube
Requests per second: 0.49 [#/sec] (mean)
Time per request: 2025.577 [ms] (mean)
Transfer rate: 18.39 [Kbytes/sec] received
(at this point, I’m disabling My Tube)
remove: My Tube
Requests per second: 1.71 [#/sec] (mean)
Time per request: 585.946 [ms] (mean)
Transfer rate: 63.25 [Kbytes/sec] received
add: Optimal Title
Requests per second: 1.49 [#/sec] (mean)
Time per request: 671.295 [ms] (mean)
Transfer rate: 55.21 [Kbytes/sec] received
add: Related Posts
Requests per second: 1.73 [#/sec] (mean)
Time per request: 577.798 [ms] (mean)
Transfer rate: 64.14 [Kbytes/sec] received
add: Taragana’s Del.icio.us mp3 Player Plugin
Requests per second: 1.55 [#/sec] (mean)
Time per request: 646.751 [ms] (mean)
Transfer rate: 57.41 [Kbytes/sec] received
add: FancyTooltips
Requests per second: 1.51 [#/sec] (mean)
Time per request: 660.859 [ms] (mean)
Transfer rate: 56.59 [Kbytes/sec] received
add: Recent Comments (my edition adds a ‘Recent comments with excerpts’ widget)
Requests per second: 1.51 [#/sec] (mean)
Time per request: 664.122 [ms] (mean)
Transfer rate: 58.38 [Kbytes/sec] received
add: Sociable
Requests per second: 1.53 [#/sec] (mean)
Time per request: 652.300 [ms] (mean)
Transfer rate: 59.62 [Kbytes/sec] received
add: Subscribe me
Requests per second: 1.52 [#/sec] (mean)
Time per request: 659.224 [ms] (mean)
Transfer rate: 61.01 [Kbytes/sec] received
add: Search Meter
Requests per second: 1.49 [#/sec] (mean)
Time per request: 670.161 [ms] (mean)
Transfer rate: 60.02 [Kbytes/sec] received
add: Search Reloaded
Requests per second: 1.43 [#/sec] (mean)
Time per request: 699.615 [ms] (mean)
Transfer rate: 57.49 [Kbytes/sec] received
add: Text Link Ads
Requests per second: 1.43 [#/sec] (mean)
Time per request: 699.958 [ms] (mean)
Transfer rate: 57.46 [Kbytes/sec] received
add: WP Lightbox 2
Requests per second: 1.41 [#/sec] (mean)
Time per request: 706.736 [ms] (mean)
Transfer rate: 57.67 [Kbytes/sec] received
add: Write Post Find and Rudd-O’s Wordspew
Requests per second: 1.44 [#/sec] (mean)
Time per request: 695.128 [ms] (mean)
Transfer rate: 59.01 [Kbytes/sec] received
add: BlogSpy for WordPress
Requests per second: 1.45 [#/sec] (mean)
Time per request: 688.703 [ms] (mean)
Transfer rate: 59.66 [Kbytes/sec] received
add: XFish Meta
Requests per second: 1.40 [#/sec] (mean)
Time per request: 714.832 [ms] (mean)
Transfer rate: 57.57 [Kbytes/sec] received
add: WP-SlimStat
Requests per second: 1.41 [#/sec] (mean)
Time per request: 708.787 [ms] (mean)
Transfer rate: 58.06 [Kbytes/sec] received
add: AutoMeta
Requests per second: 1.38 [#/sec] (mean)
Time per request: 725.395 [ms] (mean)
Transfer rate: 56.73 [Kbytes/sec] received
add: bsuite (my edition has some bug fixes by me)
Requests per second: 1.21 [#/sec] (mean)
Time per request: 827.565 [ms] (mean)
Transfer rate: 49.72 [Kbytes/sec] received
June 10th, 2006 at 3:31
In the spirit of scientific discovery, would you please run your baseline test again but with PHP Markdown disabled?
June 10th, 2006 at 10:36
I honestly would like to run it without Markdown, but then the entire blog would come crumbling down to pieces.