白金译作 加速PHP应用 - 用Xdebug分析你的代码

3156个读者 翻译: easy  04/26/2007 原文 引用 双语对照及眉批 字体大小

面向对象编程越来越流行了,在PHP领域也不例外。所以你选择了合适的设计模式,在最新的framework上开发你的网站,抽象你的数据库访问以至于你都忘了SQL这种东西了。

接下来是什么呢?

当你开始转向面向对象编程时,扑面而来的是令人头疼的访问路径问题(在你使用的framework和你写的代码之间)。

然后你会发现你的网站并没有变快-实际上,它更可能变得更慢。面向对象编程的主要目的是改进代码质量、可维护性和重用性,但是有时候随之而来的代价是速度的变慢。

当我们存在一些潜在的执行缓慢的代码时,我们不再能够打开我们的简单的PHP文件,从上到下的跟踪它的执行。我们怎么才能知道背后到底在怎么运行呢?

Xdebug

Xdebug 2 (当前还是 beta—我在用 2.0.0RC3) 是一个独立的 PHP extension。 它为在测试环境中调试和分析代码提供了多种方法。这里,我们关心的是PHP脚本的概要分析(profiling)信息。

在你的apache/php开发环境上安装Xdebug已经超出了我们文章的范围。但是我只是简单的用’sudo pecl install xdebug-beta’,然后在php.ini中添加一行代码就在我的Ubuntu 6.10 虚拟机上安装好了它。

一旦你安装好Xdebug2,下边的代码将为所以PHP接管的请求开启“auto profiling”功能。

  1. php_value xdebug.profiler_output_dir /tmp
  2. php_value xdebug.profiler_output_name timestamp
  3. php_value xdebug.profiler_enable 1

现在打开出现在/tmp目录下的输出文件…

WinCacheGrind

WinCacheGrind是从输出文件获取有用信息最简单的办法。它提供一个简单的树图展示了PHP执行中用到的class、function和filenames。最终要的是,它能告诉你每个function执行的时间。

xdebug_wincachegrind.png
WinCacheGrind example

(easy注:关于如何使用wincachegrind来进行代码优化,可以参见我前段时间写的《使用Xdebug优化你的程序》)

KCachegrind

如果你在运行KDE(在linux上或者通过fink在Mac OS X上,如果你敢的话),你可能愿意试一试 KCachegrind。它比WinCacheGrind复杂很多,但是它会把数据以一些非常有趣的方式呈现给你。

xdebug_callees.png

在这个例子中,callmap 视图非常清晰的显示了通过mysql_query()执行的sql查询花费了最多的时间。

xdebug_callgraph.png
Xdebug call map example

这里我们看见了部分的callgraph,显示了函数的交互。

(easy注:强烈推荐Rasmus Lerdorf的《Getting Rich with PHP5》,一个使用KCachegrind进行优化的经典实例)

减少摩擦(原文:Grinding),增加cache

想知道加速你的代码最简单的办法?答案有三,Cache、Cache还是Cache。

用你的新工具找出你代码中比较慢的地方。确定慢查询已经用上了Mysql的Cahe。试试APC之类的PHP二进制码存储。用Memcahed缓存你的PHP对象。缓存你生成代码的HTML中常见的部分。在发送页面前缓冲整个页面。用 Expires, ETag 和 Last-Modified HTTP headers让用户缓冲你的页面。cache层越多越好。

More Xdebug

xdebug远不止输出概要分析-我把它看成后端开发者的Firebug。我推荐每一个从事PHP相关开发的人在他们的测试环境下装xdebug,即使只是为了能输出彩色的全栈跟踪的PHP错误信息。

xdebug_error.png

从Google Summer of Code Project来看,支持即时交互的Xdebug很快就会可用了~

 
继续阅读
  • 25个顶级PHP模板引擎

    为了找到一个好的模板引擎,我在互联网上进行搜索,目前已经整理出了以下名单: Smarty Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。 Heyes Template...

  • 优化PHP代码的40条建议

    英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHP...

  • 所有PHP程序员都应该知道的五个工具

    在参与了几个大型PHP项目,写了很多PHP代码以后,我发现很多工具可以提高代码质量,简化发布,使得做为PHP开发人员的生涯变得轻松许多。许多这样的工具可能已经为大家所用。但是,由于一些人甚至没有注意到...

  • 40个迹象表明你还是PHP菜鸟

    英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大P...

  • PHP 6 的新特性

    介绍PHP 6 的部分新特性

  • 在AMP环境中使用GWT

    1. 简介 1.1 前言 写下这篇文章是因为考虑到有些用户希望在AMP(Apache,MySQL,PHP)环境中使用GWT(Google Web Toolkit)开发动态应用程序。基本想法是写一个非...

  • CakePHP 简明指南

    Cakephp 简明指南

  • 10条PHP编程习惯助你找工作

      本文来自于作者的一段面试经历,从而总结出10条编写PHP程序时的好习惯和技巧,帮助你在找工作时获得更多的优势。

相关小组

标签:

内容有问题?请与我们联络。

译作评分

  • Currently 4.67/5
  • 1
  • 2
  • 3
  • 4
  • 5
 4.7  |  3 个评分

0条评论    0眉批

添加评论

欢迎访问译言网。在这里,您可以。。。

阅读
发现
翻译