使用ab工具进行API压力测试
如何使用?
./ab -n1000 -c100 http://baidu.com/
-n请求数
-c每次并发请求数
测试结果:
请求并发数:101.65个
每个请求耗时:9.8ms
用它做个参考标准对自己项目进行测试对比。根据测试结果对PHP代码进行优化,参考以下方案:
一、多使用PHP自身能力:
要优化PHP性能就得多使用PHP自身能力,自己写一个功能不如PHP自带函数效率高。
性能问题:
自写代码冗余较多,可读性不佳,且性能低。
为什么性能低?
PHP代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销增大。
好的方法:
多用PHP内置变量、常量、函数
代码演示:
需求:将两个数组合并为一个数组,重复的元素仅保存一次。
//此处插入代码演示图
//bad.php
获取当前时间,精确到微秒
//good.php
使用函数后,代码减少了
分别用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压力测试