最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

PHP语言级性能优化使用ab工具进行API压力测试

XAMPP下载 admin 159浏览 0评论

使用ab工具进行API压力测试

 

如何使用?

./ab -n1000 -c100 http://baidu.com/

-n请求数

-c每次并发请求数

 

测试结果:

请求并发数:101.65个

每个请求耗时:9.8ms

 

用它做个参考标准对自己项目进行测试对比。根据测试结果对PHP代码进行优化,参考以下方案:

 

一、多使用PHP自身能力:

要优化PHP性能就得多使用PHP自身能力,自己写一个功能不如PHP自带函数效率高。

 

性能问题:

自写代码冗余较多,可读性不佳,且性能低。

 

为什么性能低?

PHP代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销增大。

 

好的方法:

多用PHP内置变量、常量、函数

 

代码演示:

需求:将两个数组合并为一个数组,重复的元素仅保存一次。

//此处插入代码演示图

//bad.php

zzzzzz0048

zzzzzz00048

获取当前时间,精确到微秒

 

//good.php

使用函数后,代码减少了

zzzzzz00048

分别用ab软件对bad.php和good.php进行测试。

bad.php:

每秒处理请求数:28.56

每个请求耗时:35.016ms

 

good.php:

每秒处理请求数:392.5

每个请求耗时:2.548ms

 

差距之大肉眼可见,这就体现出了PHP内置函数的重要性。

 

*尽可能掌握多的PHP内置函数。

 

知识点:PHP代码运行流程

a.php -> 引擎扫描 -> 解析 -> 生成Opcodes代码 -> 执行 -> 输出结果

 

如果用PHP自带函数,首先,代码量少了,引擎能更快理解代码要做的事,产出的Opcode会更少,所以执行起来也更快。

 

 

 

二、函数之间也有性能差异:

内置函数之间依然存在快慢差异

 

好的建议:

多去了解PHP内置函数的时间复杂度。

 

例如:isset() 和 array_key_exists()实现同样功能

都是判断key是否存在。

 

//插入代码演示图

array_key_exists();//需要85ms

isset();//需要50ms

 

循环20万次差距35ms,那请求量并发高了之后,差距就体现出来了。

 

 

 

三、减少魔法函数的使用

情况描述:PHP提供的魔法函数性能不佳。

 

为什么性能低?

因为省事,PHP底层封装了很多功能。开发者使用起来简单省事。

 

好的方式:尽可能避免使用魔法函数

 

例如:__get();//当访问一个不可访问的属性时触发该函数。

 

测试结果表明,有魔法函数与没有魔法函数,在请求数增多的时候效率明显降低。

 

*Linux time 命令可获取系统开销, 不用手动写代码打印时间

例如:time php bad.php

 

 

四、PHP错误抑制符‘@’

禁止使用。

vld工具查看Opcode.

 

五、合理使用内存和正则表达式

尽量考虑及时释放不适用的变量(unset可能出现unset不掉的情况);

 

那正则表达式书写简单,但是匹配项越多的时候会变得慢,因为正则表达式会回溯。

 

*没有金刚钻别揽瓷器活

 

六、避免在循环内做计算和查询

 

 

 

七、减少密集型业务

大批量数据处理、大批量日志分析

 

*PHP特性决定其不适合做大数据量运算,PHP的底层是C,而C更适合做计算,比PHP效率更高。

PHP适合做参数处理,衔接webserver与后端服务,UI呈现。

 

 

总结:

了解了PHP适合做什么不适合做什么,我们再开发过程中尽量发挥PHP的优势,避免使用PHP的劣势,扬其所长。

转载请注明:XAMPP中文组官网 » PHP语言级性能优化使用ab工具进行API压力测试