zoukankan      html  css  js  c++  java
  • 慕课网 -- 性能优化之PHP优化总结笔记

    视频链接,感兴趣的可以去看看,对我来说耳目一新。

    http://www.imooc.com/learn/205

    什么情况下遇到PHP性能问题

    1 :PHP语法使用不恰当

    2 :使用了PHP语言他不擅长做的事情

    3 :用PHP语言连接的服务不给力

    4 :PHP自身的短板

    5 :未知的问题

    PHP性能问题,占整个项目性能问题一般占30%,不会超过50%。
    要从全局去考虑全局的性能问题

    PHP性能问题解决方向 (从1~5的顺序,操作简单,见效快排序)
    A . PHP语言级的性能优化 :日常语法方法的优化 特点:简单高效很快见到效果

    B . PHP周边问题的性能优化 :webserver,mysql

    C . PHP语言自身的分析和优化 :PHP底层C语言逻辑的优化

    Apache Benchmark 简称ab
    ab是由Apache提供的压力测试软件。安装apache服务器时会自带压测软件

    使用 ./ab -n1000 -c100 http://www.baidu.com
    -n请求数 -c并发数 url目标

    了解 :ab 返回结果的参数
    1> Requests per second 每秒请求数 (优化目标 每秒的请求数尽可能多)
    2> Time per request 响应一个请求耗时 (优化目标 响应一个请求尽可能少)

    -------------------------------------------------------------------------------------

    【PHP语言级性能优化】
    优化点:少些php代码,多用PHP自身能力,多用PHP自身的

    性能问题:自写代码冗余较多,可读性不佳,并且性能低

                   php代码写的越长长执行效果就会越差,多用php自身的函数等

    为什么性能低? :PHP 代码需要编译为C语言,C语言又会编译成汇编语言(机器语言),这里每
                         一个过程都会请求一遍,开销很大。尤其是访问量大的时候,每次都会编译一遍。所以要尽量减少代
                        码

    好的方法:多使用PHP内置的变量、常量、函数

    原生PHP 和 自己写一段实现一个同样的功能,性能差异。有的可能会提高好几倍。
             为什么自己实现的会慢呢? PHP代码如何再linux上执行?
             *.php 通过zend引擎逐行扫描分析(Scanner),
             保存成zend引擎自己能识别的语法(Exprs),
             这些zend引擎能识别的语法,再解析(Parser)成Opcodes。
             Opcodes是最终要拿去执行的机器代码 。执行,然后输出。

    逐行扫描,转码,解析成Opcodes,然后输出
    扫描时间少了,zend转码时间会更快,解析Opcodes也会更快。

    缓存服务都是缓存的Opcodes,就不用扫描和解析了,当然就更更快了。

    【PHP内置函数的性能优劣】
    1。情况描述: PHP内置函数,之间依然存在快慢差异。使用快的函数。

    2。好的建议:尽量少用魔法函数。
               为什么魔法函数性能低:为了给程序员省事,php语言为你做了很多
               linux time函数 可以直接测试程序的耗时情况 魔法函数举例:__get();
               可以不用尽量不用,如果必须要用的时候再用。
    3。不使用@ 错误抑制符
        机制:再代码开始前、结束后,增加Opcode。
             查看一下Opcode执行码。工具:vld PHP扩展 主要作用就是把opcode 演示出来。
             php -dvld.active=1 -dvld.execute=0 at.php 回打印出opcode 。
             结果用@ 会多2行代码,多操作逻辑,有多些开销。 可以用 try throw 这种。
    【合理使用内存】
         情况描述:php有内存回收机制保底,但也要小心使用内存
         建议:利用unset()及时释放不使用的内存(注:unset出现注销不掉的情况,自己查资料)
    【尽量少的使用正则表达式】
         情况描述:正则表达式性能低,因为正则表达式回溯开销较大
          好的建议:利用字符串处理函数,实现相同的逻辑
    【避免循环内做运算】
         情况描述:循环内的计算式会被重复计算
         例 for($i=0;$i<strlen($str);$i++) 每一次for循环都会进行计算strlen
    【减少计算密集型业务】
        情况描述:PHP不适合密集型运算场景
        为什么:
             比如不适合大批量日志分析,或者大批量数据处理。
             php语言特性决定了PHP不适合做大数据运算
             php所有处理都需要转换成C语言,与C相比,C更好。
             php还有环境问题,还有语言特性。额外开销比C大很多。变量寄存等。。
        PHP适合什么?
             适合衔接webserver与后端服务、UI呈现。(就是接口,简单数据处理,和套页面)
    【务必使用带引号字符串做键值】
        情况描述:php会将没有引号的键值检查一遍是不是常量,产生查询常量的开销
    ---------------------------------------------------------------------------------------
    PHP周边问题的性能优化
    PHP周边都有什么
    1.linux环境
    2. 硬盘,文件存储,php读写
    3.数据库
    4.缓存 缓存是基于内存的
    5.网络
    抓大头去优化,就是先从大的方向去做优化

    【减少文件类操作】
             常见PHP场景的开销次序:读写磁盘、读写数据库、读写内存、读写网络数据
             读写内存 < 读写数据库 < 读写磁盘 < 读写网络数据
    【减少php发起网络请求】
            优化网络请求
            网络请求的坑:1对方接口的不确定因素 2 网络稳定性
            如何优化网络请求

               1设置超时时间 : 建议值
                      a)连接超时 200ms 这是上限,最多也不能超过这个时间
                      b)读超时 800ms 这个看具体情况
                      c)写超时 500ms 建议不要超过500ms

               2、将串行请求并行化
                      a)使用curl_multi_*() 返回时间是看用时最长的那个请求
                      b)使用swoole扩展 通过C来进行并行化。推荐使用
    【压缩PHP接口输出】
            如果用php做接口如何更高效的输出
            如何压缩 : 使用Gzip
            压缩输出的利弊:
                 利:利于数据输出,client能更快获取数据
                 弊:额外的CPU开销。如果请求大,肯能会有问题
            gzip如果数据量小于几十K的时候效果并不理想。如果大于100k,压缩就有效果。
    【缓存重复计算内容】
           什么情况下做输出内容缓存 : 固定重复请求的数据做缓存。
    【重叠时间窗口思想】 串行变并行
           如果后一个请求不强依赖于前一个返回值。就可以变成并行,降低总体时间消耗
    【旁路方案】 也是重叠时间窗口思想

    ------------------------------------------------------------------------------
    【PHP性能问题的具体分析】
    工具: XHPorf(源自fackbook的PHP性能分析工具) 如何安装,网上去找教程
    实践:通过分析wordpress程序,做优化。课程6-1具体实例分析
    php --ri 扩展名 查看php是否支持某个扩展
    linux 下搜索文件中具体代码在哪个文件
    grep 'xxx' ./ -r

    其他工具
    ab - 压力测试
    vld - opcode代码分析
    -----------------------------------------------------------------------------
    PHP性能瓶颈解决方法
    Opcode Cache :PHP扩展APC就是做Opcode缓存用的
    Apc 可能不常用了,可以再pecl点caching。查看php缓存的扩展
    pecl 是官方经过验证的PHP扩展
    扩展实现:通过PHP扩展代替原PHP代码中高频的逻辑
    Runtime优化:HHVM (phpng也许更优于HHVM)

  • 相关阅读:
    EF Code First一对一、一对多、多对多关联关系配置
    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
    ASP.NET Core 1.0 入门——Application Startup¶
    ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求
    EF Code First 学习笔记:约定配置
    ASPNET CORE初探
    EntityFramework 7.0之初探【基于VS 2015】(
    ASP.NET Core 开发
    sqlite3 外键作用原理和使用方法
  • 原文地址:https://www.cnblogs.com/zhaoyang-1989/p/6066564.html
Copyright © 2011-2022 走看看