什么情况下,遇到了PHP性能问题?
答:
- PHP语法使用的不恰当
- 使用PHP语言做了它不擅长做的事
- 用PHP语言连接的服务不给力
- PHP自身的短板
- 也不知道的问题!!!
PHP的性能问题的解决方向:
压力测试工具简介:
Apache Benchmark(ab)
简介:ab是由Apache提供的压力测试软件。安装apache服务器时会自带该压测软件。
如何使用:
./ab -n1000 - c100 http://www.baidu.com/
-n请求数
-c并发数
url目标压测地址
PHP语言级性能优化:
优化点:少写代码,多用PHP自身能力
性能问题:自写代码冗余较多,可读性不佳,并且性能低。
为什么性能低?
PHP代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大。 PHP代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大。
举例:
1代码量居多 2代码量居少
性能压测区别:
。左1。。右2。。
好的方法:多使用PHP内置变量、常量、函数
PHP代码运行流程:
优化点:PHP内置函数的性能优劣
情况描述:PHP内置函数,之间依然存在快慢差异
好的建议:多去了解PHP内置函数的时间复杂度
举例:
优化点:少用PHP魔术方法
在实际处理中,若PHP魔法函数处理起来可以比较简便时,需做抉择
在Linux中,使用命令:time php.test.php 可以查看test.php耗时时间,主要关注user的时间
优化点:产生额外开销的错误抑制符@
情况描述:PHP提供的错误抑制符只是为了方便“懒人”
@的实际逻辑:在代码开始前、结束后,增加Opcode。忽略报错
vld - PHP Opcode查看扩展
总结:
1、使用php扩展vld可以查看Opcode
2、命令php -dvld.active=1 -dvld.excute=O
3、test.php中active=1表明用vld扩展,execute-O只想查看Opcode,并不想执行。
4、在开发中尽量少用@错误抑制符。可以使用trythrow来抛出异常
优化点:合理使用内存
情况描述:PHP有内存回收机制保底,但也请小心使用内存
好的建议:利用unset()及时释放不使用的内存(注:unset()出现注销不掉的情况)
优化点:尽量少的使用正则表达式
情况描述:正则表达式的回溯开销较大,“没有金刚别揽瓷器活”
好的建议:利用字符串处理函数,实现相同逻辑
优化点:避免在循环内做运算
情况描述:循环内的计算式将会被重复计算
代码示例:
优化点:减少计算密集型业务
情况描述:PHP不适合密集型运算的场景
为什么?
PHP语言性决定了PHP不适合做大数据量运算
(php的底层是c,php的运算、处理流程都需要转换成c来实现,加上PHP的运行环境因素,其效率不如c)
PHP适用场景:
适合衔接Webserver与后端服务、UI呈现
优化点:务必使用带引号字符串做键值
情况描述:PHP会将没有印好的键值当作常量,产生查找常量的开销
好的建议:严格使用引号作为键值
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战