百度空间 | 百度首页 
 
查看文章
 
优化Zend Framework应用(二)
2008-11-08 16:04

Zend Framework 建议

仔细检查你的启动(bootstrap)文件

确定自己是否真的需要那么多的包含路径(include path),并确保使用频繁的路径在最前面,而不是最后(译注:PHP在找不到文件的时候,会逐个检查包含路径下是否存在该文件)。小心使用插件,不要启用项目不需要的插件。

Zend_Loader 要比 require_once快一点点

虽然只快一点点,但是包含文件很多的话,就会变得很重要。如Till所言,为项目编写一个专用的xyz_Loader用于包含文件,或许也是一个很好的做法,不过这么做的收益是因项目而异的。

Zend_Db

一段很优雅的代码,执行效率却可能很差。请尽量避免大数据量的查询,特别是多表连接。我们曾经遇到的一个例子是:查询结果有120多行记录,而查询的目的仅仅是获取一些字段的加和。
如果你不需要强大的prepare和execute功能,你可以像下面这样获取一个简单的查询值(当然这么做也有缺点):

PHP:
  1. $db = Zend_Registry::get('dbAdapter');
  2. $result = $db->getConnection()->query('SELECT COUNT(id) AS amount FROM articles');
  3. $row = $result->fetchObject();
  4. return $row->amount;

这么做,你可以去掉大量对你毫无用处的冗余调用。(并且可以很方便地通过Memcache缓存这个结果)。

Zend_Controller_Router_Route

尽量使用Zend_Controller_Router_Route,慎用Zend_Controller_Router_Route_Regex,你早已经知道这么做了,不是吗? :)

Zend_Filter

我们有一个UBB过滤器,用于解析用户评论中的UBB标签(如[url][/url]等)。我们自己编写了这个过滤器,但是一定要确保它尽可能的高效。如PHP文档所言,你应该尽可能的使用str_replace,请确保你一直是这么做的。

Zend_Config

我们的每一个应用有一个ini配置文件,在部署的时候进行配置。在应用中,我们通过如下的方式使用其中的变量值:

PHP:
  1. $config = Zend_Registry:get('config');
  2. $title = $config->application->title;

这么做非常漂亮,但是每次调用$config->application->title,都需要调用array_key_exists函数,它的调用过程如下所示:

TEXT:
  1. Zend_Registry::getInstance
  2. Zend_Registry::get
  3. Zend_Registry::getInstance
  4. Zend_Registry->offsetExists
  5. array_key_exists
  6. Zend_Registry->offsetGet
  7. Zend_Config_Ini->__get
  8. Zend_Config_Ini->get
  9. array_key_exists
  10. Zend_Config->__get
  11. Zend_Config->get
  12. array_key_exists
  13. Zend_Config->__isset
  14. Zend_Config_Ini->__get
  15. Zend_Config_Ini->get
  16. array_key_exists
  17. Zend_Config->__get
  18. Zend_Config->get
  19. array_key_exists

这么做效率很低吧?:) 因此,如果你需要经常使用其中的一个变量的话,请把它定义为一个常量(事实上也确实如此),就像这样:

PHP:
  1. if(!defined("APPLICATION_TITLE"))
  2. {
  3. define("APPLICATION_TITLE", $config->application->title);
  4. }

然后你就可以一直使用这个常量来代替原来的变量。

其他建议

其他一些在优化代码时需要考虑的重要问题:

避免使用shell_exec

千真万确,这个调用非常慢(在我们的应用中一次调用最慢时可以达到77毫秒)。如果你在程序中多次调用,会极大的拖累应用的执行效率。举个简单的例子:

BASH:
  1. file -i /tmp/file

它在每次调用都会占用大量资源,请尽可能的使用其它替代方案。

优化Smarty

不要加载你不需要的模块!

当然,优化代码的方法还有很多。这篇文章只是告诉你如何审视你的ZF代码,以及一些常见的陷阱。每个项目各有特色,优化的效果因项目而异。如果你有更好的建议,请在评论中告诉我。

翻译文章,仅供学习之用,版权归原作者所有。
原文网址:http://www.svdgraaf.nl/2008/11/07/optimizing-your-zf-web-application/


类别:php框架 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu