企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## PHP性能优化 1. PHP语法使用的不恰当。 2. 使用PHP语言做了它不擅长做的事。 3. 用PHP语言连接的服务不给力。 4. PHP自身的短板。 5. 我也不知道的问题。 ## PHP性能占比 1. PHP性能问题,占用整个项目的整体性能30%-40%之间。 2. PHP语言级的性能优化。 3. PHP周边问题的性能分析。比如,服务器环境,硬件配置,数据库配置。 4. PHP语言自身分析,优化。底层C的分析。 5. 2、3、4是有简单到复杂的过程。 ## 压力测试工具简介 ### Apache Benchmark(ab) #### 如何使用 ~~~ ./ab -n1000 -c100 http://www.baidu.com/ -n请求数 总共发起1000次请求 -c并发数 一次的并发量是100 url 目标压测地址 ~~~ 性能优化之前使用ab 性能优化之后使用ab 对比吞吐量和处理耗时 ab测试主要关注系统<span style="color:red">吞吐量</span> 和 <span style="color:red">服务器处理时间</span>这两个点。 ## PHP语言级性能优化 1. 少些代码,多用PHP自身能力。 2. 自写代码冗余比较多,可读性不佳,并且性能差。 3. php代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大。 4. 多使用PHP内置变量、常量、函数。 ## PHP代码运行流程 ![](https://box.kancloud.cn/cef99c401b9ab96d0843755173e991bf_2012x920.jpeg) 1. PHP内置函数的性能优劣。 2. 尽量少用魔法函数(为了给PHP程序员省事,PHP语言为你做了很多) 产生额外开销的错误抑制符@ 情况描述:PHP提供的错误抑制符@只是为了方便懒人。会增加额外开销。 vld PHP Opcode 查看扩展 #### 1)合理使用内存 PHP有内存回收机制保底,但也请小心使用内存。 可以利用unset()及时释放不使用的内存。 #### 2)尽量少的使用正则表达式 利用字符串处理函数,实现相同逻辑。 #### 3)避免在循环内做运算 循环内的计算式将会被重复计算。 ~~~ $str = "hello world"; for($i=0;$i<strlen($str);$i++){ //do something strlen 会计算多次。 } ~~~ #### 4)PHP不适合密集型运算场景 PHP的语言特性决定了PHP不适合做大数据量运算。 #### 5)PHP适合衔接Webserver与后台服务,UI呈现。 #### 6)务必使用带引号字符串做键值。 php会将没有引号的键值当做常量,产生查找常量的开销。 ## PHP周边环境 1)linux服务器 2)硬盘是硬件 3)mysql是软件 4)apache 5)内存 ![](https://box.kancloud.cn/31f5a2aae1feba28359e8b2a45dd8e9c_2478x1178.jpeg) #### 减少文件类的操作 PHP场景开销次序 1. 读写磁盘 2. 读写数据库 3. 读写内存 4. 读写网络数据 读写内存 << 读写数据库 < 读写磁盘 < 读写网络数据(其实是磁盘操作+网络延迟) #### 优化网络请求 1. 对方接口不确定因素。 2. 网络稳定性。 3. 设置超时时间,1、连接超时200ms,2、读超时800ms,3、写超时500ms 4. 将串行请求并行化。使用 curl_multi_*();,使用swoole扩展。 #### 压缩PHP接口输出 使用Gzip即可。压缩后更快传输数据,但是会产生额外的CPU开销。 #### 缓存重复计算内容 多次请求内容不变情况。 #### 重叠时间窗口理想 PHP是串行执行的。 前后任务没有强依赖关系,可以使用重叠时间窗口 ![](https://box.kancloud.cn/837cfe64cc4812bc069882de6f8ce8dd_2166x1136.jpeg) #### 旁路方案 ![](https://box.kancloud.cn/f10ca872542e402f3812d29ec3122f64_2238x1204.jpeg) xhprof 工具分析PHP性能。 https://www.jianshu.com/p/c420ebe6ce39 ### php性能瓶颈终极提升 Opcode Cache:PHP扩展APC,APC缓存PHP编译后的代码。 Runtime优化:HHVM