Cake和CI在架构/设计和代码结构上是最为相似的两个框架。不过很显然它们对于公共类加载的策略上完全不同。
BenchMarking(1)里面已经给出了CakePHP读取简单数据并显示的性能基线测试数据。可以看到性能表现不佳,具体原因还需要再进一步探查源码。
下面对CI,在同一台服务器上运行,从同一个数据库同一张表格中读取相同数据,做了相同的测试。
CI版本:2.0.3
测试命令
[test@test siege-2.70]$siege -b -c5 -r100 http://localhost:5800/
测试代码
class Deals extends CI_Controller {
public function index()
{
//$this->output->cache(10);
$this->load->database();
$this->load->model('Deal');
$data['query'] = $this->Deal->get_deals(); //get 10 records
$this->load->view('deals',$data);
}
}
红色部分是开启还是禁用cache。上面是禁用了cache。
测试结果
在禁用cache的情况下,CI的处理能力达到了40 trans/sec
在开启cache的情况下(即把红色代码uncomment掉),CI的处理能力达到了80trans/sec
可见在性能是首要衡量因素,而开发效率其次的情况下,CI这种最小化内核,按需加载的框架是更好的选择。
Cake这种基于假定预先加载的策略,在很多情况上有overhead,系统会在意识不到的情况下牺牲了性能。
尽管性能上存在较大差距,不过Cake相比CI有如下优点
*)AutoMagic简化了编程
*)Model的关联查询大大简化了数据查询
*)更OO,设计上更加精致
*)有更成熟的测试方案
*)内置Auth和ACL
*)更好的ORM
*)更完备的Cache
这使得Cake在开发效率上要胜出CI。
打个比喻,可能会更好的了解两者设计思路上的差异,CI好比鱼肠,Cake则好比巨阙。
两个框架都是学习的好对象,也都可以构造大规模/海量用户应用,如Cake曾被Mozzila用于开发addons。
究竟选择哪个框架取决于具体的应用场景和开发团队技术背景。