我已成为CakePHP的忠实粉丝和用户已有大约2。5年了,但大多数开发人员在框架中处理的主要问题是它的速度很慢,而且调度周期太长,无法使其成为可行的解决方案适用于生产环境。
我希望这个问题能激发人们分享他们提高CakePHP性能的技巧,诀窍和技巧。
我经常提到的博客文章是伪编码器8 Ways to Speed Up the Performance of CakePHP Apps,它提供了很多提示,但必须有更多提示!
所以请随意分享您对制作这个更灵活的优秀框架的想法!
答案 0 :(得分:31)
我认为这是一个非常好的问题。以下是我为加快蛋糕应用程序所做的一些事情。
正如链接文章的评论中所提到的,减少$uses
数组会有所帮助。您可以通过他们的associationg访问相关模型。因此,如果城市和地址相关联,您可以$this->City->Address
访问地址,而不是同时包含$uses
数组
在apache中,将代码从.htaccess
移动到主服务器config / vhost / whatever并设置AllowOverride None
。
在负载平衡环境中,将会话从数据库移动到内存缓存。 Memcache很容易设置,而蛋糕的DB会话类还有很多不足之处。在高负载应用程序中,垃圾收集会杀死你,因为它每秒钟都会运行一次。此外,这是一个很棒的小脚本,可以为您提供有关memcache使用情况的统计信息(基于apc.php) http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/
正如Mark Story在8篇文章的评论部分中提到的那样,压缩资产是一个非常好的主意。这是一个很好的脚本,可以缩小js和css文件,可以用来替换与cake捆绑在一起的默认css.php。 http://www.milesj.me/blog/read/32/CSSJSAsset-Compression-In-CakePHP
如果出于某种原因,人们会再次点击不再存在的图像/ css / js,那么确保这些页面不会产生蛋糕404错误可能是有益的,因为它必须通过整个蛋糕调度过程,生成一个会话等。这就像改变它一样简单:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
到此:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(img|css|js)/(.*)$
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
答案 1 :(得分:8)
我刚刚写了一些关于大幅加速cakephp应用程序的一些技巧,附带了一些实用的代码: http://www.dereuromark.de/2012/02/13/what-really-speeds-up-your-cakephp-app/
答案 2 :(得分:3)
这里有一些更好的提示,包括使用修改后的router::url
帮助器来提高性能以及一些常识:
http://www.chainfire.eu/articles/76/CakePHP_and_performance_for_noobs_/
答案 3 :(得分:1)
对于CakePHP和其他东西,只需获得更强大的服务器,更多的GHz和RAM。价格每年都会变得更便宜。虽然如果你使用VPS,我知道事情可能很紧张。
有时新硬件比为某人优化代码付费更便宜......
答案 4 :(得分:0)
对于minify css和cakephp 2中的Js,您可以使用其中一个插件
https://github.com/Er-Kalpesh/CakePHP-Combinator-Plugin
最适合优化css和js。
答案 5 :(得分:0)
我们将Memcache用于来自数据库的静态数据,如横幅,aboutus,地址等等。我们在数据插入,更新或删除时删除缓存文件。在查询时我们首先检查文件,如果它在那里然后从json文件中获取数据,则无需查询数据库,否则查询并创建新文件。所以下次数据将来自Json。
答案 6 :(得分:0)
对于CakePHP 2.x,性能瓶颈可能是使用Hash::
函数(https://book.cakephp.org/2.0/en/core-utility-libraries/hash.html)。
使用复杂表达式时它们非常慢。如果您自己编写此逻辑,则可以提高性能。