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实在啊!

此文一共有2条留言

  1. 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秒。

  2. sharmy:

    2008-10-20 11:35:57

    呵呵,$db->query要比mysql_query好维护点

发表评论