- 目录
- 1. 前言
- 2. 压力测试工具ab
- 3. PHP语言性能优化
- 3.1产生额外开销的错误抑制符@
- 3.2合理使用内存
- 3.3尽量少的使用正则表达式
- 3.4避免再循环内做运算
- 3.5减少计算密集型业务
- 3.6务必使用带引号字符串做键值
- 4. PHP周边性能优化
- 4.1减少文件类操作
- 4.2优化网络请求
- 4.3压缩PHP接口输出
- 4.4缓存重复计算内容
- 5. PHP性能分析
- 5.1 Window下的安装
- 5.2 Linux下的安装
- 5.3开启与使用
- 5.4 PHP性能瓶颈
1.前言
接触开发那么久,也是时候给自己补点性能优化方面的知识了,下面一起来增加点稀奇古怪的知识吧。
PHP性能分析工具XHPorf下载
链接:https://pan.baidu.com/s/1_uYjtUAasxtXOCx6r4o9lA
提取码:a2gb
2.压力测试工具ab
ab是Apache提供的压力测试软件,安装Apache服务器会自带。
举例:
- ./ab -n 1000 -c 100 http://www.baidu.com
- -n请求数 -c并发数
3.PHP语言性能优化
- 性能问题原因:字写代码冗余,可读性差,性能低
- 性能低原因:代码粗腰解析编译为底层语言,该过程处理开销大
- 解决办法:少写冗余代码,多用PHP自身内置变量、常量、函数
3.1产生额外开销的错误抑制符@
@的实际逻辑是在代码开始之前、结束之后,增加opcode,忽略报错
建议:不要使用错误抑制符,会产生性能开销;尽量使用try....catch()
3.2合理使用内存
在脚本中大量使用内存会使系统缓慢,虽然PHP有内存回收机制,但应当小心使用内存;利用unset()及时释放不使用的内存
3.3尽量少的使用正则表达式
正则表达式的回溯开销大,应尽量少用,可利用字符串处理函数实现相同逻辑
3.4避免再循环内做运算
循环内是的计算会被重复计算,浪费资源开销
3.5减少计算密集型业务
PHP不适合密集型运算场景,因为PHP语言特性决定了PHP不适合做大数据量的运算;PHP适合衔接web与后端服务、UI呈现
3.6务必使用带引号字符串做键值
PHP会把没有引号的键值当作常量,产生查找常量的开销,比如:$array[“key”]
4.PHP周边性能优化
PHP周边包括了Linux运行环境、文件存储、数据库、缓存、网络等,平时开发必须搞清楚是脚本问题(自身与研发问题)、还是外部问题,搞清楚了才能更好地优化(对症下药)
4.1减少文件类操作
常见PHP常见开销次序:
读写硬盘、读写数据库、读写内存、读写网络数据
开销情况(由大到小):
读写网络数据>读写硬盘>读写数据库>读写内存
所以,让操作尽量和内存打交道而不是和文件打交道
4.2优化网络请求
网络请求问题:
对方接口不确定因素、网络稳定性
如何优化网络:
4.2.1设置超时时间
- 连接超市 200ms
- 读超时 800ms
- 写超时 500ms
4.2.2将串行请求并行化
- 使用curl_multi_*()
- 使用swoole扩展
4.3压缩PHP接口输出
使用GZIP压缩、有利于我们数据输出、使得客户端更快获取数据,但会增加额外的cpu开销
4.4缓存重复计算内容
缓存的内容应该为多次请求但内容不变的
什么时候缓存?后面的任务不强依赖前一个任务结果
5.PHP性能分析
工具:XHPorf (源自Facebook的PHP性能分析工具)
5.1 Window下的安装
5.2 Linux下的安装
5.3开启与使用
其他性能测试工具:
ab压力测试、vld-opcode代码分析
5.4 PHP性能瓶颈
解决办法:通过PHP扩展代替原PHP代码中高频逻辑
php扩展站点网址:pecl.php.net
性能优化扩展推荐
- Opcode Cache:PHP扩展APC
- Runtime优化:HHVM