Cake vs Solar vs Symfony vs Zend Framework

今天在找ZendFramework资料的时候找到了一个网站,用apache branchmark对四个框架进行了测试。分别是:

结果是Solar每秒中处理请求最多,Zend Framework次之,后面则跟着Cake,Symfony。

ramework avg rel
solar-0.25.0 170.26 3.24
zend-0.6.0 131.91 2.51
cake-1.1.12 114.39 2.18
symfony-1.0.0beta2 67.18 1.28

由于该ZF版本是0.6版,而马上0.9版也就要发布,所以上面结果可参考一下。而且,作者在这些测试代码放在google code中,有兴趣可以自己下下来测试一下。solar这个框架我也是今天才看到,有点像ZF,不过具体代码就没看了,也是PHP5专用的。

New Year’s Benchmarks

原来这篇Weblog的作者就是Solar的开发者。

关于Zend Framework中的URL映射

在MVC的结构中,都会有一些URL的映射机制,他可以让你写出漂亮的URL,友好的URL是SEO中重要的一部分。在使用ZF的时候,如果对URL没有太多要求,可以使用默认约定的URL规则,这样做是最快的。如果你想使用漂亮的URL,不管你用什么Route,都不要一次性添加许多Route。因为在ZF中,所有的自定Route都会添加到一个数组中,而且,每次都会遍历数组来匹配你请求请求的URL对应哪一个Route。如果你的规则越多,那么效率就会越低,那是当然的。所以,最好添加Route前,判断一下URL,再来添加某一个Route。

以上我看ZF的源代码后的结果,不过还没有做的测试,可能出现不服的情况。 

Zend_Db里各种接口关系

这段时间主要在改数据库方面的东西,于是有时间对Zend_Db进行了解。

Zend_Db是最低层的封装,通过不同的适配器,来实现不同数据库和不同数据库接口之间的差别。现在最主要的使用pdo_mysql这个适配器,Mysqli也许也是个不错的选择。这个接口的数据库操作是需要自己写sql语句的,但还是提供了一些简单的功能封装。至于Oracle和Db2我就没试过了。

Zend_Db_Table是一个“表模式”,这种模式你能用面向对像的方式来操作数据库。在创建实现的时间,会要求你添加了个Zend_Db实例,因为所有的数据操作还是通过Zend_Db来完成的。

Zend_Db_Table_Row你可以把它看到是一条记录,当然是通过Zend_Db_Table里的某些方法创建的,让你操作对象一样修改某一种记录。但这里还是包装,Zend_Db_Table_Row的方法找Zend_Db_Table,结果Zend_Db_Table又去找Zend_Db。

Zend_Db_Table_Rowset是一个Zend_Db_Table_Row的迭代器。

Zend Framework 1.1 Roadmap

我已经好久一段时间没有写PHP的程序,这个小网站的程序也停了下来。一些工作转到了Django。最近去看1.1的Roadmap的时候,发现1.1将是一个非常重大的更新,LDAP在大型网站中是非常有用的服务,做为“企业级”的框架有些东西还是必要的。Zend_Cache方面看来也得到了强化。

ZF-2117 Code Generation Tool

这个看来是非常必要的,DRY,是个好东西

ZF-2116 View Layouts

已前在Zend_View与控制器结合不是非常紧密,现在通过Layouts技术来结合。总之1.1是个非常重要的版本。另外PDT也已经发布1.0的版本了,最近被eclipse的强大所感动了。

简单的方法优化Zend Framework的性能

在Zend Framework1.7中的Zend_Loader包中,加入了一个优化读取helper类的机制。只需要简单设置一下Zend_Loader_PluginLoader就可以达到效果。

Zend_Loader_PluginLoader::setIncludeFileCache($classFileIncCache);

$classFileIncCache指向一个过写的空白PHP文件,当有helper之类的文件需要加载时,会自动写入到$classFileIncCache文件中,以include_once的形式加载,在之后就会默认自动加载程序中用到的文件了。在许多的组件的读取helper过程中,已经判断了是否设置了$classFileIncCache,如果设置了就会写进这个文件,如果没有设置就是直接读取了。

关于自定的View_Helper可以设置Zend_Loader_PluginLoader的插件读取目录,具体可参考官方文档

前天看两段非常有趣的代码

本为facebook开源代码当天我就知道了,当时好像没有下载下来,所以就没看,但前天下下来看了下,然后也打了相关的PDF来看,应用语言的一些做开发,但每个文件的分类还是非常的清晰的。PHP本身就是一种面向过程的语言。虽然在PHP5中有了许多Java的特性,但是在实际的应用中,也有像facebook这样的应用,像许多著名的CMS系统,都并非采用的某MVC些进行开发。

当天,我又看了下PHPUnit,在里面有些我原来没有注意的东西,通过代码生成测试用例,也有通过测试生成代码的东西。但这种方式的前提是按照固定的模式来写代码。

这是两种风格非常大的写法,我是这么觉得的。什么时候用什么模式那就是仁者见仁,智者见智

PHP。。。。

最近,再做PHP的开发工作,给我的感觉是,跟我在武汉2年前的PHP开发工作没有多大区别,还是一圈代码混在一起的搞法,整个软件工程没有进步,或者说只是当前的工作是这样。

这是什么原因呢?我有时在想,想过后,这实在是让人郁闷。

通过这一段时间,对开发框架的设计有点想法,准备把这些记录下来,什么时候实现还是未知数,因为前面有个block。

使用什么方式生成xml

我最近在强化feed部分,由于Zend Framework中的生成feed的的模块太糟糕,我是说实现,通过传递字典来生成所有的东西。我原来对feed的就是简单的实现,不考虑什么别的。现在我要来完善这个东西。在实现这个东西的时候,到底是使用dom和生成xml,还是直接通过连接字符串来生成xml之间选择。也许xmlwriter也是个不错的选择,于是我通过phpunit中的PHPUnit_Extensions_PerformanceTestCase,作了性能测试,如果直接用字符串连接会快40%。所以,我还是决定用字符串连接算了,dom的用法真是烦琐,不再封装一下,真的会搞死人。等完成了再用字符和xmlwriter做下比较。