PHP性能优化的几个方向
发表于 2019-06-08 23:18
1、什么情况下PHP遇到了性能问题
1)PHP语法使用不当
2)使用PHP语言做了它不擅长的事
3)使用PHP语言连接的访问不给力
4)PHP自身的短板
5)未知的原因
常见的PHP场景的开销次序:
读写内存、读写数据库(基于硬盘,加了缓存)、读写磁盘、读写网络数据(读写硬盘+网络延迟)(开销大的速度快)
PHP性能的问题其实或许只占整体项目性能问题的不足40%
PHP性能问题的解决方向:
1)PHP语言级的性能优化 ( PHP语句优化 )
a. 少写代码,多使用PHP自身的函数 PHP代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大
多使用PHP内置的函数 常量和变量,注意PHP内置函数间依然会有性能的差异 eg isset在判断键是否存在时,效率会比array_key_exists的效率要高一些,所以应该多去了解PHP内置函数的时间复杂度
b. 减少PHP魔法函数的使用,PHP为了方便程序员,做了很多的事,magic method使程序书写简单,但是效率会变低 eg __get() 循环100万次大概是2.5的差异,使用time方法可以直接计算系统耗时
c. 禁用错误抑制符@ file_get_contents测试
@会在opcode中增加opcode(BEGIN_SLIENCE)忽略报错,在函数结束后增加end_slience开启报错
d. 合理的使用内存和正则表达式
合理使用内存,使用unset及时释放不需要的内存
正则表达式的回溯开销大,尽量利用字符处理函数来实现相同的逻辑
e. 避免在循环内做运算,会被重复计算
f. 减少密集计算型的业务 不适合做大数据量的运算,适合作为wbserver与后端衔接,与模板引擎配合做UI呈现
g. 务必使用带引号的字符串做键值key(否则会先查找PHP的常量集)
2)PHP周边问题的性能优化
PHP周边都要有什么?
Linux环境 (服务器性能)、 文件存储(硬盘性能) 、数据库(数据库性能) 、 内存、缓存(数据读取)、网络(涉及远程调用时)
a. 减少文件类的操作
b. 优化网络请求
1)设置超时时间 a.连接超时200ms b.读超时800ms b.写超时500ms
2)将串行请求并行化 a.使用curl_multi_*,依赖于最慢的请求 b.使用swoole扩展
c. 压缩PHP接口输出 使用gzip压缩 利于我们的数据输出,但会产生额外的CPU开销
d. 缓存重复计算的内容 多次请求的内容不发生变化,有cache就读cache,无cache则计算,常用于模板 eg Smarty模板引擎
3)PHP语言自身的分析优化 ( PHP底层语言C语言性能优化 )
APC XHprof YAC等
评论 (0人参与)
最新评论