IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

前端开发中的性能那点事(一)巧用xdebug

搜索技术博客-淘宝 2010-12-26 21:14:24 累计浏览 3,042 次
本机暂存

前言:
在我们平时的php开发中,一个大的项目经过长时间的积累以后你会发现性能越来越慢,而性能到底消耗在了什么地方,常常是一个令人头疼的问题,function a()调用了多少次,function b()又消耗了多少时间,我们到底怎么查找是哪个蛀虫拉慢了我们的程序运行速度呢?在这里给大家介绍一款工具xdebug,相信很多人已经听说过了,希望借助这个工具我们可以起到简单分析php程序性能瓶颈的问题。
A)假设1,假设用户目录在/home/ad
B)假设2,假设php目录在/home/ad/php

1、xdebug简介与安装
xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。
1)下载xdebug
xdebug的官方下载地址为:http://xdebug.org/download.php
最新版本为:Xdebug 2.1.0
2)xdebug的安装

 
1 cd /home/ad
3 tar -zxvf xdebug-2.1.0.tgz
4 cd xdebug-2.1.0
5 /home/ad/php/bin/phpize
6 ./configure --enable-xdebug --with-php-config=/home/ad/php/bin/php-config
7 make
8 make install

安装完以后会提示你扩展安装到了哪个目录,类似  /home/ad/php/lib/php/extensions/no-debug-non-zts-20060613/
假设你的php.ini放在 /home/ad/php/lib/php.ini
加上

 
1 [xdebug]
2 zend_extension = "/home/ad/php/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
3 xdebug.auto_trace = on
4 xdebug.auto_profile = on
5 xdebug.collect_params = on
6 xdebug.collect_return = on
7 xdebug.profiler_enable = on
8 xdebug.trace_output_dir = "/home/ad/xdebug_log"
9 xdebug.profiler_output_dir = "/home/ad/xdebug_log"

重启apache
去/home/ad/xdebug_log下看看是不是日志已经出来了

2、xdebug参数简介
zend_extension 加载xdebug扩展
xdebug.auto_trace 自动打开打开函数调用监测
xdebug.auto_profile 自动打开性能监测
xdebug.trace_output_dir 设定函数调用监测信息的输出文件的路径。
xdebug.profiler_output_dir 设定效能监测信息输出文件的路径。
xdebug.collect_params 打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。
xdebug.collect_return 打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。

3、示例程序与日志收集

 
01 function a()
02 {
03     echo "run me";
04 }
05 function b()
06 {
07     a();
08     sleep(1);
09     a();
10     sleep(1);
11     a();
12 }
13 b();

4、日志分析工具wincachegrind
http://sourceforge.net/projects/wincachegrind/
不用安装直接双击就可以打开了
我们用它打开刚才收集的日志cachegrind.out.***
第一眼就可以看到 我们在main里面调用了一次b函数,这个函数执行了2秒,如下图
原图已失效
我们双击打开b函数的详细执行情况,可以看到b调用了a函数三次,sleep两次,以及每个函数花费的时间如下图
原图已失效

5、关于xhprof 

XHProf这个软件本是Facebook内部的一个应用工具,同样可以完成类似的功能而且是基于web界面的使用起来更简单,大家也可以搜索一下使用一下。

http://baike.baidu.com/view/2936755.htm

下期预告:(二)巧用curl 并发减少后端访问时间

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,270)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
  4. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  5. Linux如何统计进程的CPU利用率 (累计阅读 16,308)
  6. 如何查找消耗资源较大的SQL (累计阅读 15,211)
  7. 我的PHP,Python和Ruby之路 (累计阅读 13,147)
  8. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,789)
  9. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  10. Redis消息队列的若干实现方式 (累计阅读 12,088)