PHP性能优化

2015.8.17

 
解决方向:
PHP语言级的性能优化
PHP周边问题的性能优化
PHP语言自身分析、优化(PHP底层 C层面上的)
 
PHP语言级性能优化
优化点:少些代码,多用PHP自身能力
    性能问题:自写代码冗余较多,可读性不佳,并且性能低
    原因:PHP代码需要编译解析为底层语言,每次请求都会处理,开销大
    多使用PHP内置变量、函数、变量
    php代码运行流程:
优化点:PHP内置函数的性能优劣
    php内置函数之间依然存在快慢差异
    多去了解PHP内置函数的时间复杂度
优化点:尽量少用魔法函数
    PHP提供的魔法函数,性能不佳
    尽可能规避使用PHP魔法函数(只是尽量,可以进行对比)
优化点:产生额外开销的错误抑制符@
    @符号逻辑:在代码前、结束后,增加Opcode,忽略报错
优化点:合理使用内存
    PHP有内存回收机制保底,但是也请小心使用内存
    利用unset()及时释放不适用的内存(注:unset()出现注销不掉的情况)
优化点:尽量少的使用正则表达式
    正则表达式的回溯开销较大,
    利用字符串处理代码,实现相同逻辑
优化点:避免在循环计算式内做运算
    循环内的计算式将会被重复计算
  1. <?php
  2. $str="hello word";
  3. for($i=0;$i<strlen($str);$i++){
  4. //do something
  5. }
应该改为
  1. <?php
  2. $str="hello word";
  3. $count=strlen($str);
  4. for($i=0;$i<count;$i++){
  5. //do something
  6. }
优化点:减少计算密集型业务
    PHP不适合密集型运算的场景
    PHP语言特性决定了PHP不适合做大数量级的运算
    PHP适合衔接WebServer与后端服务、UI呈现
优化点:务必使用带引号字符串做键值
    PHP会将没有引号的键值当做常量,产生查找常量的开销
    严格使用引号作为键值
  1. <?php
  2. $array=array(
  3. "key"=>"ddd",
  4. "imooc"=>"ddfdfdf"
  5. );
  6. echo $array[key]."\n";//PHP自带纠错功能
虽然$array["key"]和$array[key]的输出一样,但是$array["key"]性能更好
 
 
PHP周边问题的性能优化
优化运行环境
    Linux运行环境

    文件存储
    数据库
    缓存

减少文件类操作
    常见PHP场景的开销次序:
        读写磁盘、读写数据读写内存、读写网络数据
        读写内存<<读写数据库<读写磁盘<读写网络数据
 
优化网络请求
    问题:对方接口的不稳定因素、网络稳定性
    方法:设置超时时间 
                  1.连接超时 200ms
                  2.读超时  800ms
                  3.写超时  500ms
            将串行请求并行化
                1.使用curl_multi_*()
                2.使用swoole扩展(最佳)
 
压缩PHP接口输出(压缩数据)
    使用Gzip即可实现输出压缩
压缩输出的利弊:
    利:利用我们的数据输出,Client端能更快获取数据
    弊:压缩将参数额外的CPU开销
 
缓存重复计算内容
    在多次请求。内容不变的情况可以使用内容缓存,使用缓存互用机制(就可以使用静态化)
重叠时间窗口思想
旁路方案
 
PHP性能瓶颈解决方法:
    Opcode Cache:PHP扩展(APC、memcache等缓存扩展)
    扩展实现:通过PHP扩展代替原PHP代码中高频逻辑
    Runtime优化:HHVM等

 



posted on 2017-05-09 11:35  轻浮不韪  阅读(133)  评论(0编辑  收藏  举报