Plone 4 Speed in Real Life
Having just seen Hanno's blog post on how much faster Plone 4 is, I thought I'd give it a test myself. Whilst Hanno did a test on a simple 'default' site in which he removed most of the portlets and the likes, I thought I'd try it out on a 'real' site and see what sort of performance gains I get.
The site I chose was a site we designed called Kent Rural Network. This is a very simple site, so I thought a good one to try as it doesn't have such vast amounts of customisation that it would render such comparative tests moot. Plone has always been able to go fast if you've known what knobs to tweak, the news here is how much faster is out of the box, without needing to enable any caching, clustering or tuning.
The Kent Rural Networks site is written on Plone 3 (was developed on Plone 3.1) and has a very simple skin applied, yet retains much of Plone's out of the box features such as news items, events and a number of simple custom content types created in Archetypes. This is the kind of site that could be developed taking Plone out of the box and spending a a few days creating a theme and some content types for it.
The tests were carried out on my Macbook Air (1.6Ghz Core 2 Duo Processor). The absolute values are not that important as every server will give different results, the main thing here is the ratio of performance of the newer versions of Plone.
As you can see, the upgrade to Plone 4 brings a pretty significant performance boost, the same as Hanno's figures show. You get almost double the performance accessing the homepage of the site. I also tried testing it with Chameleon installed (the new template rendering engine in Plone trunk) which gave a speedup of over 2.5 times!
As an aside: the upgrade process from Plone 3.3 to Plone 4 on this site was pretty painless. There were some tweaks that needed to be made, mainly in templates we had customised and were referring to methods that are no longer global in Plone4. An example is the toLocalizedTime() method which used to be global, but now you need to add
<tal:define="toLocalizedTime nocall: context/@@plone/toLocalizedTime;">
in order to bring it into scope.
Definitely the easiest major Plone upgrade we've ever had.