zoukankan      html  css  js  c++  java
  • PHP性能优化简述

    先谢慕课网,这里只做理论简述
    /**
    * PHP性能优化
    *
    * 1.问题分析
    * PHP语法使用不正确
    * PHP不擅长的事
    * PHP连接的服务不给力
    * PHP自身短板
    * 其它原因
    * 2.PHP项目性能问题占整个项目的性能问题
    * PHP性能问题不会超过整个项目性能问题的一般,通常占30%到40%,
    * 优化整个项目不仅优化PHP性能,整个项目中PHP性能问题只占一部分。
    * 优化过程:
    * 1.php语言级的性能优化;快速见到收益
    * 2.php周边问题的性能优化;web server,mysql等等
    * 3.php自身分析优化;
    *
    * 压力测试软件
    * Linux下安装apache会自带ab压力测试工具
    * ./ab -n1000 -c100 http://www.baidu.com
    * -n总请求 -c并发
    * 注意如果有白名单需要先把本地ip加入白名单,否则会被认为ddos攻击;
    * 主要查看 Request per second 每秒接受的请求数,越多越好
    * Time per request 每个请求耗时,越小越好
    *
    */

    /*
    *
    * PHP语言级的优化
    * 1.少写代码,多用PHP自身的能力;
    * 比如说使用PHP内置函数/变量/常量来使实现功能;
    * 2.PHP内置函数的性能优劣,PHP内置函数,可能实现相同功能,但也存在差异;
    * 比如说isset($arr[$i])/array_key_exists($i,$arr);
    * 3.尽量少用魔法函数,PHP提供的魔法函数,性能不佳;
    * 比如说__get(),time php test.php;
    * 4.产生额外开销的错误抑制符;
    * 错误抑制符,就是在代码前后添加Opcode,Opcode的作用就是忽略报错。尽量不要使用。try throw好一些;
    * 5.合理使用内存;
    * 利用unset及时释放不使用的内存;
    * 6.尽量少使用正则表达式;
    * 利用字符串处理函数好一些;
    * 7.避免在循环里面做运算;
    * 将计算放在循环之外,循环上做两个变量的比较;
    * 8.减少计算密集型业务;
    * 大批量的数据处理,大批量的日志分析,PHP的语言使用C写的,PHP运算的开销比C大;
    * PHP使用衔接Web server和后端服务,UI呈现,字符串文本处理;
    * 9.务必使用带引号字符串做数组的键值;
    *
    *
    *
    * vld工具可以查看opcode,是一个PHP扩展;
    *
    * PHP代码运行流程:php代码通过zend引擎逐行扫描,解释称zend引擎自己能识别的语法,
    * 通过解析,解析成opcodes,opcodes拿来执行,完成output;
    * PHP缓存都是缓存Opcodes。
    */

    /**
    * PHP周边问题的优化
    * 1.Linux运行环境
    * Linux服务器中运行PHP,所以环境很重要,Linux跑的快与慢很重要!
    * 2.文件存储,硬盘的性能,硬盘的写入读取;
    * 3.Mysql数据库,基于文件系统;
    * 磁盘是硬件,数据库是软件;
    * 数据库的性能也决定着PHP的快慢;
    * 4.缓存,内存,硬件的内存,软件的memcache,redis等;
    * 5.网络
    *
    * 连接外部数据库耗时需要 网络+数据库,PHP文件的耗时,也有周边服务的耗时!
    * 如果是数据库的问题,优化语法就没有用!
    *
    * 建议:
    * 1.减少文件类操作;读写磁盘/读写数据库/读写内存/读写网络数据;
    * 读写内存<读写数据库<读写磁盘<读写网络数据;
    * 常用的数据库会用内存作为缓存!先将只能写入内存,写入成功之后才操作,比直接操作磁盘快一些!
    * 网络数据通过socket,也是一个磁盘操作!有网络延迟!无法确认机房网络是优良的!尽量减少读写网络的情况!
    * 数据库,磁盘,网络都是基于文件系统,基于硬盘!
    * 内存操作基于内存,直接与内存交互,开销很小速度更快!
    * 尽量多的操作内存数据库,少操作磁盘网络数据!
    *
    * PHP请求网络接口的优化:
    * 对方接口的不确定因素/网络不稳定性
    * 1.设置超时时间:连接超时/读超时/写超时,建议连接超时200毫秒,读超时800毫秒,不可大于1秒,写超时500毫秒!
    * 2.将串行请求并行化:curl改成curl_multi_*()/使用swoole扩展
    *
    * PHP做接口,压缩PHP接口输出!
    * 使用Gzip即可!client端更快的获取数据,但是会产生额外的CPU开销;数据小于100k的时候,压缩没有太大效果!
    *
    * 缓存重复计算内容:
    * 多次请求,内容不变情况,使用缓存;常用在模版输出上,smarty用cache功能;
    *
    * 重叠时间窗口思想:后面的任务不强依赖前一个任务;定时缓存!
    * 旁路方案:模版渲染环节!
    *
    *
    */

    /**
    * PHP性能的具体分析
    * XHPorf工具;
    * php --ri xhporf 查看是否支持xhporf
    */
    /**
    * PHP性能瓶颈解决方法:
    * Opcode cache:PHP扩展APC;对Opcode做缓存!php的pecl站点,看PHP扩展!
    * 通过PHP扩展代替啊源代码中高频逻辑
    * Runtime优化:HHVM
    */

    /**
    * PHP主要就是在读写内存,读写数据库,读写磁盘,读写网络数据;
    * PHP项目的优化也就是缓存的优化/网络的优化/数据库的优化,以及PHP部署在Linux环境上,Linux对PHP的性能也有影响!
    * mysql的优化很重要,其他的优化也不能忽视!
    * 读写内存比数据库快,数据库比磁盘快,磁盘比网络数据快,因为网络数据也是基于文件系统,并且跟网络的稳定性相关;
    * 通常尽量避免获取网络数据,当必须使用网络接口提供的数据时,应该设置连接超时,读超时,写超时等!
    * 然后就是多操作缓存,较少磁盘操作,可以使用memcache,redis缓存较少读写磁盘的开销!
    * 数据库虽然也是基于文件系统的,但是他又比直接操作磁盘快,因为大部分数据库都是用内存做缓存,写入缓存成功就会返回结果,所以比直接操作磁盘要快!
    * 总之就是多操作内存数据库,少操作磁盘,网络数据!
    * 另外Linux系统,Web server的性能也影响PHP的性能!
    * 然后,再来说一下数据库的优化,常用的就是MySQL数据库,所以就是Mysql的优化!
    *
    */
  • 相关阅读:
    C++
    Qt简介
    C语言
    C/C++
    swagger2 Illegal DefaultValue null for parameter type integer
    maven包引入问题ClassNotFoundException: org.elasticsearch.client.Cancellable
    mysql自定义排序
    使用node创建服务器 运行vue打包的文件
    rsync实现服务器之间同步目录文件
    将jar包发布到maven的中央仓库细节整理
  • 原文地址:https://www.cnblogs.com/eis13/p/5844376.html
Copyright © 2011-2022 走看看