PHP性能优化

来源:互联网 发布:软件系统测试报告模板 编辑:程序博客网 时间:2024/06/04 06:09

性能检测工具

webgrind

webgrind是一个网页版的性能分析工具,它的主要作用就是分析xdebug生成的cachegrind文件,以一种界面友好详尽的方式来展示性能数据。试用了一下感觉还是很不错的.
链接:https://github.com/jokkedk/webgrind 是性能分析工具xdebug的PHP web版

安装

1.解压,放入网站文件夹,然后进入相关路径即可。比如http://localhost/webgrind.
2.xdebug是后台程序,所以首先要安装xdebug http://www.xdebug.org/docs/install
3在php.ini中做好设置:
xdebug.profiler_enable = 1
一直使用xdebug来分析脚本。0/1,–(如果设置为1那么每个被执行的脚本都会被分析。如果开启这项会影响性能较大)
xdebug.profiler_enable_trigger = 1
是否开启触发 。0/1,–是否启用添加url参数的形式来触发分析。比如. http://localhost/samplepage.php?XDEBUG_PROFILE
可以查看xdebug手册来获取更多信息: http://www.xdebug.org/docs/all_settings

配置

通过webgrind文件夹下的config.php可以做相关配置,但是需要与被默认安装并且配置正确的xdebug协同使用。

$storageDir 一个可以写入的文件夹路径。(存储分析后生成的 cachegrind文件,为空就是用系统tmp文件夹或者xdebug的tmp文件夹。)
$profilerDir -如果没装xdebug,webgrind就会到此路径下分析里面的cachegrind文件。如果安装了xdebug那么会查找它的xdebug.profiler_output_dir。(默认是/tmp)

如果是通过wamp自带安装的那么在php.ini中会有这些简单的设置选项,如果是手工安装那么安装好xdebug后只要在php.ini里增加下面的2,3项即可。
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = “d:/wamp/tmp”
其中第1项是开启远程调试,这里先不讲,2,3项前面的译文已经解释。第4项是分析出的信息文件命名格式,%t代表时间,%p代表pid。
xdebug相关设置可以通过phpinfo() 开快查看。

使用

设置好后就可以重启wamp来看看效果:
我们使用XDEBUG_PROFILE作为url的一个参数写在某个页面上后,转入页面,然后到xdebug.profiler_output_dir所定的路径下,就会发现生成了一个cachegrind.out.开头的文件,这就是webgrind需要分析的文件
进入webgrind主页面:页面很简单,右上角有一排下拉列表:


webgrind把所有被调用函数/方法首先做一个排序,由高到低显示。然后取出前N个,使他们耗时比率之和在90-100%之间。

要注意的是,最好不要选择100%,这样将会显示所有被调用的函数/方法
第二个就是选择profile文件。默认是分析最新一次的xdebug记录。如果之前设置好路径和记录机制那么我们就会发现下拉列表里有很多选项。

第三个选项是显示百分比/毫秒/微秒。

下面的彩色进度条一样的东东是耗时量比较条。蓝代表php内置函数,灰色(这里占用很小看不出)代表requir/onclude,绿代表类方法,橙黄代表类其他过程函数 (用户自定义函数)

总结

invocation count 表示的是整个php页面从载入到执行完毕呈现,各种函数被调用的总次数(如sleep不管被哪个函数调用,总共页面期执行了6次,t3被t4直接调用、t5间接调用一次,自身执行一次)
total self cost 表示的是函数自身消耗(就如t5中10万次循环消耗了31毫秒,sleep执行了2000毫秒,但自身消耗并不把其他任何函数调用算在其中)
total inclusive cost 表示的是此函数从开始到执行完毕所用消耗 ,包括自身消耗和调用其他函数消耗
点击一个父函数名后出现展开:
Calls - 此函数中调用并执行的所有函数/方法名 次数 及耗时
Total Call Cost - 被此父函数调用时,执行的总耗时 (the total time executing this function, when called from the parent function)
Count - 被此父函数调用时,执行的次数。number of times the parent calls the child

脚本时间检测

在linux下执行

time php 1.php #1.php是写的测试文件

分析结果如下

[root@iZm5e6pha0zu99qcjngnc1Z ~]# time php 1.php
11
real 0m0.020s
user 0m0.012s
sys 0m0.007s

检查邮箱

一般邮箱由这些组成 帐号@邮箱服务器域名
首先先正则匹配邮箱格式是否正确,然后在验证email地址的时候使用checkdnsrr()函数验证域名是否存在,这个函数能够确认指定的域名能否解析成IP地址

代码优化

别人给我分享了代码优化的注意点,现在也分享给大家
同时也写个函数优化的给大家
创建函数create_function(“形参列表”,”函数体代码”)

<?php$fn=create_function('name','echo "hello";');$fn('小明');?>

作用:创建一个函数
参数:形参列表,创建函数时需要的形参
函数体代码, 创建函数时函数内部的代码
默认生成的函数名是从lambda_1开始,后面的数字依次递增的一个字符串,并且函数名中还存在着一个隐藏字符(保证它的安全性).函数名不断的发生变化,安全性高.只有重启apache的时候,才会还原. var_dump($fn);
//打印出来是 string(9) “lambda_4”

create_function只用在执行的时候才会去创建一个函数,所以如果代码没有执行,则函数没有创建,可以节约代码空间.用function创建函数,直接开辟空间了.
所以如果你想区分他究竟是什么函数,可以使用var_dump(变量名),来查看其数据类型,如果是普通字符串,说明他是一个可变函数,如果是一个自增长的字符串,说明是create_function创建的函数,如果是一个对象,说明其是一个匿名函数

代码优化

0 0
原创粉丝点击