PHP性能优化总结

最近利用业余时间学习了下慕课网的PHP性能优化课程,获益良多,特来整理一下:

什么情况下,遇到了PHP的性能问题?

PHP语法使用不恰当
使用PHP语言做了它不擅长做的事
用PHP语言连接的服务不给力
PHP自身的短板
我也不知道的问题

PHP性能问题占比

PHP性能问题一般占项目的30%左右,我们做项目优化的时候不要局限于PHP

PHP的性能问题的解决方向

PHP语言级的性能优化
PHP周边问题的性能优化
PHP语言自身分析、优化

PHP语言级性能优化

优化点:少写代码,多用PHP自身能力
性能问题:自写代码冗余较多,可读性不佳,并且性能低
为什么性能低?:
PHP代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大。
php->scanner->exprs->parser->opcodes->output
好的方法:多使用PHP内置变量、常量、函数
总结:这些变量、常量、函数还是要死记硬背,不然关键的时候用的时候根本想不起来

优化点:PHP内置函数的性能优劣
情况描述:PHP内置函数之间依然存在快慢差异
好的建议:多去了解PHP内置函数的时间复杂度
举例:isset()和array_key_exists()对比
总结:这个优化点有点吹毛求疵了,一般程序员很难知道哪个函数性能好一点,如果每次写代码都要去百度的话,太费时间了,况且我觉得只要是内置函数性能差距不会太大

优化点:尽可能少用魔法函数
情况描述:PHP提供的魔法函数,性能不佳
为什么性能低?:为了给PHP程序猿省事
好的方法:尽可能规避使用PHP魔法函数
举例:测试魔法函数__get()性能
总结:魔法函数本来就是用来方便程序员的,如果只是为了这一点点性能开销就舍弃,得不偿失,我觉得这个点也没必要太较真

优化点:产生额外开销的错误抑制符@
情况描述:PHP提供的错误抑制符只是为了方便“懒人”
@的实际逻辑:在代码开始前、结束后,增加opcode,忽略报错
好的建议:建议尽量不要使用@错误抑制符

优化点:合理使用内存
情况描述:PHP有内存回收机制保底,但也请小心使用内存
好的建议:利用unset()及时释放不使用的内存

优化点:尽量少的使用正则表达式
情况描述:正则表达式的回溯开销较大,”没有金刚钻别揽瓷器活“
好的建议:利用字符串处理函数,实现相同逻辑

优化点:避免在循环内做运算
情况描述:循环内的计算式将被重复计算

优化点:减少计算密集型业务
情况描述:PHP不适合密集型运算的场景(大批量数据分析,大批量日志分析)
为什么?
PHP的语言特性决定了PHP不适合做大数据量运算。
PHP适合场景:适合衔接webserver与后端服务,UI呈现
优化点:务必使用带引号字符串做键值
情况描述:PHP会将没有引号的键值当做常量,产生查找常量的开销
好的建议:严格使用引号作为键值,而且最好单引号

PHP周边问题的性能优化

周边:
linux运行环境
文件存储
数据库
缓存
网络

常见PHP场景的开销次序
读写内存<读写数据库<读写磁盘<读写网络数据

优化网络请求
网络请求的坑
1.对方接口的不确定因素
2.网络稳定性
如何优化网络请求?
1.设置超时时间
a.连接超时200ms
b.读超时 800ms
c.写超时500ms
2.将串行请求并行化
a.使用curl_multi_*()
b.使用swoole扩展

压缩PHP接口输出
如何压缩?
使用gzip即可
压缩输出的利与弊?
利:利于我们的数据输出,client端能更快获取数据 30K以下
弊:额外的CPU开销 100K以上

缓存重复计算内容
什么情况下做输出内容的缓存?
多次请求,内容不变

重复重叠方案:并发代替串行,前后两个业务没有强依赖才能使用

PHP性能瓶颈究极方法
opcode cache:PHP扩展APC(pecl.php.net扩展网站)
扩展实现:通过PHP扩展代替原PHP代码中高频逻辑(C底层所以速度快)
runtime优化:HHVM

PHP性能问题的具体分析
工具:XHPorf(源自facebook的PHP性能分析工具)、xdebug
实践:通过分析wordpress程序,做优化!
总结:这个工具确实很有用,优化的时候可视性很强

vld opcode代码分析
压力测试工具(ab)
./ab -n1000 -c100 http://www.baidu.com
总结:jmeter是ab的可视化工具,更方便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值