PHP性能优化
初探
什么情况下遇到php性能问题
php语法使用不恰当
使用php做它不擅长的事情
php语言连接的服务不给力
php自身的短板
我也不知道的问题
Apache自带压力测试工具ab
./ab -n1000 -c100 http://www.baidu.xom
-n 请求数 -c并发数
性能问题解析
性能优化项目,不要局限于仅优化php
php性能问题解决方向
php语言级的性能优化
少写代码,多用php自身能力
多使用php内置变量、常量、函数等
php运行流程
.php->scanner->Exprs->Parser->Opcodes->Exec->Output
php内置函数的性能优劣:
多去了解php内置函数的时间复杂度
isset()性能比array_key_exists()好
尽可能少用魔术方法
产生额外开销的错误抑制符@
php opcode扩展
合理使用内存
利用unset()及时释放不使用的内存
尽量少的使用正则表达式
利用字符串处理函数,实现相同逻辑
避免在循环内做运算
减少计算密集型业务
适合衔接websever与后端服务、UI呈现
务必使用带引号字符串做键值
php周边问题性能优化
问题所在
linux运行环境
文件存储
数据库
缓存
网络
优化方法
减少文件类操作
读写内存<<读写数据库<读写磁盘<读写网络数据
优化网络请求
网络请求的坑:
对方借口的不确定因素
网络稳定性
优化方式
设置超时时间:连接超时(200ms)、读超时(800ms)、写超时(500ms)
将串行请求并行化
使用curl_multi_*()
使用swoole扩展
压缩php接口输出
如何压缩:使用Gzip
压缩利与弊
利:利于数据输出,客户端更快获取数据
弊:额外的CPU开销
缓存重复计算内容
多次请求内容不变情况下
重叠时间窗口思想
旁路方案
php语言自身的分析优化
工具:
XHPort-源自facebook
vld-opcode代码分析
ab-压力测试
php性能瓶颈解决方法
Opcode Cache:php扩展APC
扩展实现:通过php扩展代替php代码中高频逻辑
Runtime优化:HHVM