Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Speeding up CakePHP

I've been a keen fan and user of CakePHP for about 2.5 years now, but the main bugbear that most fellow developers level at the framework is that it's slow, and the dispatch cycle takes too long to make it a viable solution for production environments.

I'm hoping that this question will inspire people to share their tips, tricks and hacks for speeding up CakePHP performance.

The blog post I most often refer to is pseudocoder's 8 Ways to Speed Up the Performance of CakePHP Apps, which has great tips, but there must be more out there!

So please feel free to share your thoughts on making this excellent framework that much more nimble!

like image 769
David Yell Avatar asked Apr 20 '10 16:04

David Yell


4 Answers

I think this is a really good question. Here are a couple things I do to speed up cake apps.

  1. As mentioned in the comments of the linked article, cutting down on the $uses array helps a little. You can access associated models by going through their associationg. So if City and Address where associated, you could access address by $this->City->Address instead of including both in the $uses array

  2. In apache, move the code from your .htaccess into the main server config/vhost/whatever and set AllowOverride None.

  3. In a load balanced environment, move sessions from the DB to memcache. Memcache is easy as hell to setup, and the cake's DB session class leaves much to be desired. In high load application the garbage collection will kill you, as it ends up running every second or so. Also, here's a great little script that gives you stats about your memcache usage (based of apc.php) http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/

  4. As Mark Story mentions in the comments section of the 8 ways article, compressing your assets is a very good idea. Here is a good script that minifies both js and css files, which can be used to replace the default css.php that comes bundled with cake. http://www.milesj.me/blog/read/32/CSSJSAsset-Compression-In-CakePHP

  5. If for some reason people hit alot of images/css/js that don't exist anymore, it might be beneficial to make sure those pages do not generate a cake 404 error, as it has to go through the whole cake dispatching process, generates a session etc. It's as simple as changing this:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
    

    to this:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/(img|css|js)/(.*)$
    RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
    
like image 79
JoeyP Avatar answered Nov 19 '22 08:11

JoeyP


I just wrote about some more tips to drastically speed up cakephp apps with some practical code attached: http://www.dereuromark.de/2012/02/13/what-really-speeds-up-your-cakephp-app/

like image 29
mark Avatar answered Nov 19 '22 10:11

mark


Some further good tips here including using a modified router::url helper for performance as well as some common sense:

http://www.chainfire.eu/articles/76/CakePHP_and_performance_for_noobs_/

like image 32
supermethod Avatar answered Nov 19 '22 10:11

supermethod


Both for CakePHP and other things, just get a more powerful server, more GHz and RAM. Prices get cheaper every year. Although if you are on a VPS, I understand things can be tight.

And sometimes new hardware is cheaper than paying for someone to optimise the code...

like image 1
trafalgar Avatar answered Nov 19 '22 08:11

trafalgar