PHP Performance – Which Opcode Cache to Use and Why

cachememcachedperformancePHPWordpress

I keep hearing about some PHP (opcode) caches like – APC, XCache, Memcache, eAccelerator, etc.

But I couldn't ever figure out how to go about choosing one. Apart from performance benefit, which a caching system is supposed to deliver, which other factors should be a point of concern.

Like why you will say X cache system is better than Y? I am less worried about relative performance gain. Small differences between any two systems matter less.

If a generic answer to my question is not possible, here are few pointers.
I use dedicated VPS with Mediatemple (with root access). RAM is 512 MB (physical) + 400MB (swap)
I am concerned about WordPress and its cousins WordPress-MU and BuddyPress. 90% of our codes/sites fall into WordPress family.

Thanks in advance for some help.

Best Answer

The products you list serve different purposes.

OPCode caches

There are many PHP Accelerators (OPCaches) as seen on this Wikipedia list. As is common with open source products, they are all fairly similar. XCache is the lighttp PHP accelerator, and is the default choice when you are running that HTTPd. It works well with Apache as well, however APC seems to be slightly more "plays well with others" socially speaking, being officially supported as part of PHP, and is released in-step with the official PHP distribution.

I abandoned usign eAccelerator due to its slowing development, and lagging against the releases of PHP, and the official blessed status APC offers with similar performance.

These products typically are drop in; no code change instant performance boost. With large codebases (Drupal, Wordpress) the performance can be up to 3x better while lowering response time and memory usage.

Data Caching

Memcache is a slightly different product -- you might think of it as a lightweight key value system that can be scaled to multiple servers. Software has to be enhanced to support Memcache, and it solves certain problems better than others. If you had a list of realtime stock values on your website, you might use Memcache to keep a resident list of the current value that is displayed accross your website. You might use it to store session data for short term reuse. You wouldn't use it for other things such as full-page caches, or as a replacement for MySQL.

There are also Wordpress addons such as WP-Super-Cache that can drastically improve Wordpress' performance (infact, WP-Super-Cache can rival static HTML based sites in many cases)

In summary -- I would highly recommend APC if you want a "set it and forget it, well supported product".

Related Topic