Zend Framework Table–鸡肋?
2007-10-19 00:39越来越感觉Zend Framework Table是个鸡肋了,用起来麻烦不说,效率也不见得有多高。特别是在多表联合查询或者是复杂SQL查询的时候,那个写法之痛苦啊。还有就是它的findDependentRowset,findParentRow,findManyToManyRowset又非得让你有现成的查询结果集合才能用,而且速度低的要命。我现在的这个项目做出来后效率低的要死,半天网页都打不开。想了半天都不知道问题出在哪,说是网速吧,其它网站唰的一下就打开了,Apache也没有问题,实在不行了把Xdebug打开再用WinCacheGrind一看,我的乖乖,好吓人哦,程序运行时间花了1600多毫秒,再加上页面是美工用Table赶出来的,Table套Table,一层套一层,头都看大了,速度不慢才怪呢。
继续研究才发现全是findDependentRowset,findParentRow,findManyToManyRowset惹的祸,一大半的时间费在了它们的上面,悲哀啊~~~
于是我想换成$db->query($sql)->fetchAll();来查询看看,好家伙,太牛了,奶牛!蒙牛!在替换了一大半之后,运行时间降到了300多毫秒,这也太夸张了吧!下来得好好查查,求证一下到底是我程序哪里有问题还是真的是Zend的问题,如果真是Zend的问题,那估计以后都不要用它的那些个鸡肋了,还是自己写SQL实在啊!
通过RSS 2.0来获取此文章的最新评论.
LemonSnow:
2008-10-13 10:02:04
Table每次调用的时候都要读取一次数据库元信息(如字段索引结构等),为了提高效率你得用Zend_Db_Table::setDefaultMetadataCache()进行必要的缓存。缓存位置可以设置为file、db或者apc,apc效率最高。
Table的优势是可以通过面向对象的方式访问数据库,如果用$db->query还不如直接用mysql_query效率更高了。
我使用zend+apc缓存后,页面基本在0.02秒。
sharmy:
2008-10-20 11:35:57
呵呵,$db->query要比mysql_query好维护点