php

PHP性能优化的几个方向

mrye 发表于 2019-06-08 23:18

什么情况下PHP遇到了性能问题?该如何解决?

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人参与

最新评论

暂无评论
mrye


文章:233
推荐阅读
   1482   
mrye   2019-06-08 23:18:11
   1190   
mrye   2019-06-08 23:05:03
   1756   
   1917