- 浏览: 3362173 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://www.21haolou.com/articles/show/46
引言
CakePHP 有些慢已经不是什么公开的秘密了。但不为众人所知的是这是一个大大的阴谋。而我会因揭露这个阴谋惹上不少麻烦。不过我愿意冒险一搏。我手头有大量的记录和文档线索表明CakePHP开发团队的成员手头持有戴尔,IBM,思科以及其他服务器厂商的公司股票。想必你已经听说过这类的措辞像“硬件白菜价,而程序员太金贵了。"Cake的开发团队从中嗅到了商机,他们便制作出了这款易于上手和开发,但是却跑得很慢的框架来。他们希望你在硬件方面多砸点钱来。这点子太有才了吧,对不?好了,闲扯就此结束。作为一个CakePHP的开发者,每当你学会使用本文中的一个技巧,套在你脖子上的这枷锁就少了一层。
注意:
本文认为你已经在使用ContainableBehavior并且已经对你的SQL查询进行优化和索引了
我使用ab(ApacheBench是Apache自带的HTTP性能测试工具)对所有改动后的性能进行了测试,并与基准值做了对比。这里的基准值是 debug级别为0时的简单应用程序的性能。我并没有把实际基准数字贴出来。因为这类数字会因应用程序和机器性能而波动。不过我将以百分比的形式将大概的 性能提升数据附在了文中。
另外,你想看看我测试所用的应用程序内容?门儿都没有。
一、 将debug级别设置为0
这技巧很没技术含量,是吧?在Google小组中有 大量的帖子在扯其他方法。想都不用想,先把你CakePHP应用程序的debug级别设置为0在说。
将此值设0和不设0是有区别的,原因就在Cake引 擎生成两部分缓存内容
第一部分是/tmp /cache/models中的缓存内容。在这里,你会看到每个模型都有一个对应的文件,这些文件中包含的是数据库的表模式(table schema)。想必你已经看到过数据库查询记录中包含一些”DESC table;” 这类的查询内容,这些缓存文件就是做着这个用的。当debug级别设置为0时,这些数据库查询就不会进行。
第二部分的缓存是在/tmp /cache/persistent中。当你运行你的Cake网页应用时,CakePHP会用到其中几种不同的文件。而通常拖慢CakePHP运行速度最 厉害的当属cake_core_file_map。这个文件保存了到各个不同类的路径信息。为了创建这个文件,CakePHP会做一个必须但是也是非常耗 费时间的搜索,以便在你的目录结构中找到对应的文件。
那么,debug级别是0和debug级别大于0时有什么区别呢?呵,他们两者之间相差的是2.73517104年。当debug级别大于0时,这些缓存文件的时间周期是10秒钟。而把debug级别设置为0时,这些文件的缓存时间周期则是999 天。(译者:这就是前面 2.73517104年差距的来历)
实 际上我这里有这样一个疑问:既然这种事情是非常“脑残”的技巧,那么连这种“脑残”的技巧都不采用的人是不是比“脑残”好“脑残”呢?如果连“脑残”的人 都能弄明白这种技巧,那么那些不会的人的脑子是不是被狗吃了。既然这些人的脑子被狗吃了,那么我对这钟人讲这种技巧岂不是肉包子打狗——有去无回?(译 者:囧)
性能大致提升数字为:80%到100%左右
二、缓存拖慢速度的查询/网络服务请求等等
对于缓存你应用程序中的单个部件而 言,CakePHP的缓存库(cache lib)是一个非常不错的工具。它会处理所有“脏重累的活儿”,比如向缓存引擎中的文件或者内存中写入内容。你所需要做的就是想清楚哪些东西需要缓存。
打个比方说,你有一个已经索引并已经优化了的数据库 查询,但是查询速度还是比较慢。CakePHP的烹饪手册上(link)就提供了一个例子,教你 如何将缓存库应用起来,缓存后,CakePHP就不会对每一个请求都进行这种拖慢速度的数据库查询。
如 果你网站的部分内容是来自其他网络服务的的,比如一个显示最新推文的区域(这个例子并不恰当,因为大多数Twitter挂件都是用JavaScript写 成的,这里读者就将就一下吧。)我们完全没必要对每个发来的请求都调用这个网络服务。只需像上面一样,用缓存功能将其缓存起来即可
性能提升:+0% 到 1000000%,这取决于你的应用程序,以及你所缓存的内容。
三、缓存视图
你可将这视作整个页面的缓存。CakePHP的烹饪手册提供了一些基本的知识(link),因为页面创建依然是通过PHP进 行,所以对于保持页面的部分动态内容还是有些灵活方法的。比如,如果你运营着一个网店时,你可以将产品页面进行缓存,但是页面上还是可以有一块区域来显示 用户的购物车内容,
注意:在CakePHP的烹饪手册中有一个专门的小节来介绍CakePHP支持的各种缓存引擎(link)。 但是,目前的版本(1.2.1.8004),视图缓存所使用的是基于文件的缓存引擎,并不依赖于上面第二部分所说的缓存库( cache library)
速度大致提升:+130% 到 160%
四、HTML网页页面缓存
这个是我们自己的想出来的(link)。 它的原理跟WordPress上的Super Cache插件一样。它会将CakePHP的 页面以HTML文档的形式直接写入网站的根目录。下次,当用户点击这个页面时,你的服务器会直接将这个HTML文件传输给用户,而无需运行PHP。
这种方法也有其明显的局限性,比如缓存的页面上完全 没有动态内容,缓存的内容也不会自动清除。但是,对于RSS的订阅源或者其他像popurls 这种所有浏览者所看到的都是同样内容的页面而言,这种方法就非常不错。
速度提升:~60000%——这绝非夸张,这才是真正的速度提 升
五、 APC
维基百科是这样描述APC的,“它是一种自由的开源框架,它可以优化PHP的中间 代码,并在共享内存中缓存PHP字节码编译器(Bytecode compiler)中的数据和编译好的代码。”(维基百科链接)。总的来说,速度真TMD的 快,并且你还无需改动你的代码。很爽,是吧?
速度提升:+25% 到 100%
六、持久性模型
CakePHP的烹饪手册并没有提及这个技巧,这个 功能的开启很简单,你只需在你的控制器(或者父控制器中)中添加如下属性即可
var $persistModel = true;
在页面刷新后,你会注意到 /tmp/cache/persistent 目录下会出现两个新的文件,它对应控制器所包含的每个模型。一个文件是模型的缓存,另一个缓存的是类注册器(ClassRegistry)中的对象。跟上 面所提到的视图的缓存一样,这种缓存只会保存在文件系统中。
速度提升:+0%到200%
这种方法效果怎么样取决于你的应用程序。如果你的控制器只有一个模型,并且并没有与其他任何模型关联,那么你不会看到有多大的速度提升。在我们的测试应用程 序中,它带来的速度提升大约在100%左右。其中测试用的控制器中有一个模型,该模型关联其他三个模型,这些关联的模型又有各自关联的模型。
七、在APC中存储持久性缓存内容
要使用这个,你需要开启APC,将CakePHP的 核心缓存模式设置为APC。在core.php文件中,添加如下代码。
Cache::config('_cake_core_', array('engine' => 'Apc',
'duration'=> 3600,
'probability'=> 100,
));
这会将通常缓存在/tmp/cache/persistent 中的缓存文件(不包括持久性模型)保存到内存中去。
速度提升:~25%
这带来的速度提升很难衡量。我试着启用不带指令缓存 (opcode caching)的APC,以便衡量所带来的速度提升,但是却找不到如何设置。
八、加速反向网址路径的寻找
目前有两种方法可以达到此目的。第一种是Debuggable.com网站上Tim同学在一篇文章中所提及的。Tim的方法只对某种链接类型有效,而且还会破坏反向网址路径的寻找功能,而我的方法使用的是缓存功能(link) (译者:具体内容见这个链接。),CakePHP开发团队的Nate同学也称这种方法非常“高明”(link)
速度提升:~50%
正如这里的所有技巧一样,实际的速度提升取决于你的 应用程序。如果你并不使用大量的自定义网址路径,而且页面的链接也不多,那么这个技巧不会带来多大的速度提升
引言
CakePHP 有些慢已经不是什么公开的秘密了。但不为众人所知的是这是一个大大的阴谋。而我会因揭露这个阴谋惹上不少麻烦。不过我愿意冒险一搏。我手头有大量的记录和文档线索表明CakePHP开发团队的成员手头持有戴尔,IBM,思科以及其他服务器厂商的公司股票。想必你已经听说过这类的措辞像“硬件白菜价,而程序员太金贵了。"Cake的开发团队从中嗅到了商机,他们便制作出了这款易于上手和开发,但是却跑得很慢的框架来。他们希望你在硬件方面多砸点钱来。这点子太有才了吧,对不?好了,闲扯就此结束。作为一个CakePHP的开发者,每当你学会使用本文中的一个技巧,套在你脖子上的这枷锁就少了一层。
注意:
本文认为你已经在使用ContainableBehavior并且已经对你的SQL查询进行优化和索引了
我使用ab(ApacheBench是Apache自带的HTTP性能测试工具)对所有改动后的性能进行了测试,并与基准值做了对比。这里的基准值是 debug级别为0时的简单应用程序的性能。我并没有把实际基准数字贴出来。因为这类数字会因应用程序和机器性能而波动。不过我将以百分比的形式将大概的 性能提升数据附在了文中。
另外,你想看看我测试所用的应用程序内容?门儿都没有。
一、 将debug级别设置为0
这技巧很没技术含量,是吧?在Google小组中有 大量的帖子在扯其他方法。想都不用想,先把你CakePHP应用程序的debug级别设置为0在说。
将此值设0和不设0是有区别的,原因就在Cake引 擎生成两部分缓存内容
第一部分是/tmp /cache/models中的缓存内容。在这里,你会看到每个模型都有一个对应的文件,这些文件中包含的是数据库的表模式(table schema)。想必你已经看到过数据库查询记录中包含一些”DESC table;” 这类的查询内容,这些缓存文件就是做着这个用的。当debug级别设置为0时,这些数据库查询就不会进行。
第二部分的缓存是在/tmp /cache/persistent中。当你运行你的Cake网页应用时,CakePHP会用到其中几种不同的文件。而通常拖慢CakePHP运行速度最 厉害的当属cake_core_file_map。这个文件保存了到各个不同类的路径信息。为了创建这个文件,CakePHP会做一个必须但是也是非常耗 费时间的搜索,以便在你的目录结构中找到对应的文件。
那么,debug级别是0和debug级别大于0时有什么区别呢?呵,他们两者之间相差的是2.73517104年。当debug级别大于0时,这些缓存文件的时间周期是10秒钟。而把debug级别设置为0时,这些文件的缓存时间周期则是999 天。(译者:这就是前面 2.73517104年差距的来历)
实 际上我这里有这样一个疑问:既然这种事情是非常“脑残”的技巧,那么连这种“脑残”的技巧都不采用的人是不是比“脑残”好“脑残”呢?如果连“脑残”的人 都能弄明白这种技巧,那么那些不会的人的脑子是不是被狗吃了。既然这些人的脑子被狗吃了,那么我对这钟人讲这种技巧岂不是肉包子打狗——有去无回?(译 者:囧)
性能大致提升数字为:80%到100%左右
二、缓存拖慢速度的查询/网络服务请求等等
对于缓存你应用程序中的单个部件而 言,CakePHP的缓存库(cache lib)是一个非常不错的工具。它会处理所有“脏重累的活儿”,比如向缓存引擎中的文件或者内存中写入内容。你所需要做的就是想清楚哪些东西需要缓存。
打个比方说,你有一个已经索引并已经优化了的数据库 查询,但是查询速度还是比较慢。CakePHP的烹饪手册上(link)就提供了一个例子,教你 如何将缓存库应用起来,缓存后,CakePHP就不会对每一个请求都进行这种拖慢速度的数据库查询。
如 果你网站的部分内容是来自其他网络服务的的,比如一个显示最新推文的区域(这个例子并不恰当,因为大多数Twitter挂件都是用JavaScript写 成的,这里读者就将就一下吧。)我们完全没必要对每个发来的请求都调用这个网络服务。只需像上面一样,用缓存功能将其缓存起来即可
性能提升:+0% 到 1000000%,这取决于你的应用程序,以及你所缓存的内容。
三、缓存视图
你可将这视作整个页面的缓存。CakePHP的烹饪手册提供了一些基本的知识(link),因为页面创建依然是通过PHP进 行,所以对于保持页面的部分动态内容还是有些灵活方法的。比如,如果你运营着一个网店时,你可以将产品页面进行缓存,但是页面上还是可以有一块区域来显示 用户的购物车内容,
注意:在CakePHP的烹饪手册中有一个专门的小节来介绍CakePHP支持的各种缓存引擎(link)。 但是,目前的版本(1.2.1.8004),视图缓存所使用的是基于文件的缓存引擎,并不依赖于上面第二部分所说的缓存库( cache library)
速度大致提升:+130% 到 160%
四、HTML网页页面缓存
这个是我们自己的想出来的(link)。 它的原理跟WordPress上的Super Cache插件一样。它会将CakePHP的 页面以HTML文档的形式直接写入网站的根目录。下次,当用户点击这个页面时,你的服务器会直接将这个HTML文件传输给用户,而无需运行PHP。
这种方法也有其明显的局限性,比如缓存的页面上完全 没有动态内容,缓存的内容也不会自动清除。但是,对于RSS的订阅源或者其他像popurls 这种所有浏览者所看到的都是同样内容的页面而言,这种方法就非常不错。
速度提升:~60000%——这绝非夸张,这才是真正的速度提 升
五、 APC
维基百科是这样描述APC的,“它是一种自由的开源框架,它可以优化PHP的中间 代码,并在共享内存中缓存PHP字节码编译器(Bytecode compiler)中的数据和编译好的代码。”(维基百科链接)。总的来说,速度真TMD的 快,并且你还无需改动你的代码。很爽,是吧?
速度提升:+25% 到 100%
六、持久性模型
CakePHP的烹饪手册并没有提及这个技巧,这个 功能的开启很简单,你只需在你的控制器(或者父控制器中)中添加如下属性即可
var $persistModel = true;
在页面刷新后,你会注意到 /tmp/cache/persistent 目录下会出现两个新的文件,它对应控制器所包含的每个模型。一个文件是模型的缓存,另一个缓存的是类注册器(ClassRegistry)中的对象。跟上 面所提到的视图的缓存一样,这种缓存只会保存在文件系统中。
速度提升:+0%到200%
这种方法效果怎么样取决于你的应用程序。如果你的控制器只有一个模型,并且并没有与其他任何模型关联,那么你不会看到有多大的速度提升。在我们的测试应用程 序中,它带来的速度提升大约在100%左右。其中测试用的控制器中有一个模型,该模型关联其他三个模型,这些关联的模型又有各自关联的模型。
七、在APC中存储持久性缓存内容
要使用这个,你需要开启APC,将CakePHP的 核心缓存模式设置为APC。在core.php文件中,添加如下代码。
Cache::config('_cake_core_', array('engine' => 'Apc',
'duration'=> 3600,
'probability'=> 100,
));
这会将通常缓存在/tmp/cache/persistent 中的缓存文件(不包括持久性模型)保存到内存中去。
速度提升:~25%
这带来的速度提升很难衡量。我试着启用不带指令缓存 (opcode caching)的APC,以便衡量所带来的速度提升,但是却找不到如何设置。
八、加速反向网址路径的寻找
目前有两种方法可以达到此目的。第一种是Debuggable.com网站上Tim同学在一篇文章中所提及的。Tim的方法只对某种链接类型有效,而且还会破坏反向网址路径的寻找功能,而我的方法使用的是缓存功能(link) (译者:具体内容见这个链接。),CakePHP开发团队的Nate同学也称这种方法非常“高明”(link)
速度提升:~50%
正如这里的所有技巧一样,实际的速度提升取决于你的 应用程序。如果你并不使用大量的自定义网址路径,而且页面的链接也不多,那么这个技巧不会带来多大的速度提升
发表评论
-
php图片添加文字水印实现代码
2016-03-16 13:13 1075http://my.oschina.net/zyt1978/b ... -
借助phpmailer使用gmail和163邮箱发送邮件
2016-01-16 14:03 4365http://www.solagirl.net/phpmail ... -
PHP 启用Gzip 压缩进行优化
2014-12-02 22:08 1227确定服务器支持gzip compression Use PHP ... -
自定义Access-Control-Allow-Origin策略以解决字体文件跨域权限问题
2014-11-23 22:43 1922http://yuguo.us/weblog/access-c ... -
推荐 7 款类似Google Analytics 的开源程序
2014-11-14 23:30 4136http://www.aips.me/google-analy ... -
piwik安装过程
2014-11-13 23:08 916http://blog.csdn.net/gudaoqianf ... -
使用 PHP 获取并解析 JSON 显示在页面中
2014-11-05 22:44 3390http://www.qianxingzhem.com/pos ... -
PHP获得IP
2014-11-02 15:06 1085<?php function getIP() /* ... -
CakePHP的全局常量及方法
2014-10-28 14:32 1158http://docs.30c.org/cakephp/glo ... -
php日期
2014-10-21 21:04 861http://php.net/manual/zh/functi ... -
PHP生成各种验证码和Ajax验证
2014-10-08 13:47 933http://www.helloweba.com/view-b ... -
计算一段日期内的周末天数的php代码(星期六,星期日总和)
2014-10-07 14:48 2240http://www.jb51.net/article/208 ... -
PHP中出现Notice: Undefined index的三种解决办法
2014-09-14 17:18 2444http://blog.csdn.net/stellaah/a ... -
细说websocket - php篇
2014-07-24 21:04 1174http://www.cnblogs.com/hustskyk ... -
CakePHP log(日志)操作
2013-12-07 23:19 1317http://luzl.iteye.com/blog/6537 ... -
使用PHP缩略图和剪切图
2013-11-28 23:05 1851API: resource imagecreatetrueco ... -
几个jQuery的图片裁剪插件
2013-11-28 21:02 4208http://hi.baidu.com/coffeant/it ... -
PHP URL 重定向 的三种方法
2013-11-26 10:06 1176http://my.oschina.net/qingyi090 ... -
PHP如何实现整除
2013-11-24 00:48 3358http://www.zhixing123.cn/php/27 ... -
PHP截断包含汉字不产生乱码的方法
2013-11-21 22:29 1018PHP截取汉字乱码问题解决方法mb_substr函数的应用 h ...
相关推荐
cakephp分页,cakephp框架的分页的方法的文档,是cakephp框架的内容。
app, CakePHP 3.0应用程序模板 应用程序框架 用创建应用程序的框架可以在下面找到框架源代码: /cakephp 。安装下载 Composer 或者更新 composer self-update 。运行 php composer.phar create-
最简单的方法来安装CakePHP
cakephp 框架 cakephp 框架 cakephp 框架 cakephp 框架 cakephp 框架
打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;...CakePHP的中文资料很少,大部分是英文的,希望对大家有用,谢谢!
2:cakephp中虽然对模型的操作方法中并没有提供像上面提到的连贯方法 但是cake框架提供了一个containable行为类来更好的完善模型关联中遇到的上述问题 ">1:thinkphp中通过框架提供的连贯操作Model >join ‘other ...
There are two main ways to get a fresh copy of CakePHP. You can either download an archive copy (zip/tar.gz/tar.bz2) from the main website, or check out the code from the git repository. To download ...
PHP框架高级编程-应用Symfony,CakePHP和Zend.
打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;...CakePHP的中文资料很少,大部分是英文的,希望对大家有用,谢谢!
CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。在cakephp.org站点的Sites in the wild页面可以看到当前使用...
CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。在cakephp.org站点的Sites in the wild页面可以看到当前使用...
CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4
CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。在cakephp.org站点的Sites in the wild页面可以看到当前使用...
cakephp中acl详解
cakePHP经典官方教程,含大量实例代码。
cakephp-1.2 manual 英文版,离线版。
Lead you from a basic setup of CakePHP to building a couple applications that will highlight CakePHPs functionality and capabilities without delving too deeply into the PHP language, but rather ...
cakephp 框架书籍 英文版
cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码cakephp框架源码
cakephp-1.3.21.zip