优化php程序,试试这几招。

这篇文章属于总结性质的内容,放在博客里面也是给自己备忘的。

一、.性能优化三部曲:

Created with Raphaël 2.2.0 开始 性能分析 性能优化 性能评估? 结束 yes no
1.性能的评估
1.1评估的指标
评估指标主要看两个东西:QPS(有性能分析工具可直接查看,没有的话通过awk日志文件查看)和相应时间(可埋点监测)
简单解释下为什么是这两个,一方面提高QPS可以从一定程度节省机器开销进而省钱,另一方面减少响应时间可以提高用户的体验,人多了自然钱来的就快了。

1.2评估的方法
关于QPS的检测,可使用压力测试工具比如ab,wrk等,或者直接awk日志分析出来;响应时间可通过专门的埋点检测记下运行时间(gettimeofday/microtime)
如果评估的结果不是很稳定?1.先在测试前先不记录,先发一些请求预热一下(主要是为了缓存,cdn等) 2.调用后端的mock数据(推荐facebook的FBMock),以排除不确定的因素。3.多次检测取平均值算标准差。
2.性能的分析
2.1 QPS的瓶颈
QPS=min(min(client并发数,server并发数)*1s/平均响应时间,cpu核数*1s/单位请求cpu的时间)
所有优化方向主要是两个:1.如果是响应时间的瓶颈则应提高并发数活着减少平均响应时间来提高qps 2.如果是cpu瓶颈,就要换更给力的cpu来减少cpu时间了。
2.2 耗时的分析
响应时间的构成=cpu时间+文件的io时间+网络io时间+线程的同步sleep+其他会影响block线程的操作
2.3 性能分析工具
Xhprof:可通过观察代码的流程以及主要耗时的点,对点优化

二、性能优化方法

有句话叫“架构决定了系统的上限,代码决定了系统的下限”。所有优化方向主要就是架构级的优化(数量级的提升)和代码级的优化(常数级的提升)
1.架构级的优化
1.1引擎的选择
php5.x, php7(phpng), HHVM, HippyVM等等
![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTYwMzIwMDA0NDI4NTcw?x-oss-process=image/format,png)

1.2存储选型/索引处理
关于存储的类型主要分为mysql和nosql两大块:Mysql, Mongo, Redis...。需要根据具体的情况选择不同的数据库,比如对于地理位置的处理,mongodb就有专门的东西。索引方面简单来说还是要结合实际场景应用的搜索方式进行索引的添加,话题太长不做深入探讨。

1.3加cache
分布式的缓存:Memcached、Redis等(存在一致性hash、rehash、主从机制、分布式cas等等)
本地的缓存:OpCache(推荐,php5.5+以及将其默认绑定了,但是需要开启才能使用),APC(php5.5-推荐使用),Yac(鸟哥杰作,无加索的共享内存)等等

1.4并行化、异步化
常用的事:PHP Pthread,swoole,Yar,mysqli_poll,队列脚本的使用等等
2.代码级的优化
2.1 减少重复的计算
主要体现在for;foreach的循环中,如果一开始就定住的值无需在循环中数次计算。

2.2 合理使用扩展
如果系统中经常使用某个耗时函数,则可将此函数写成c扩展的形势进行调用更给力;str系列的函数>正则>自己遍历字符串;array函数>自己遍历数组;isset>in_array()

2.3 后端调用优化
批量获取>单个获取;并行请求/处理>串行请求/处理;本地调用>http rpc

2.4 日志以及异常处理
日志使用异步化记录(register_shutdown_function);不要在线上打印DEBUG和TRACE级别的日志;关闭E_NOTICE级别的日志;消除正常情况下所有的PHP Warning/Exception;尽量不使用set_error_handler自定义错误处理;尽量不使用@来抑制错误

2.5 引擎指定优化(HHVM)
全局代码包装成一个函数再进行调用;避免使用太多的php动态特性(include, eval, compact, create_function,  extract, get_defined_vars);用类代替关联数组

三、总述:性能的优化是全栈的

1.从产品功能的层面看,优化产品需求对于代码的发展以及后面的优化是有很大影响的。
2.从业务逻辑的层面看,优化sever端业务的冗余逻辑,以及对业务进行恰当合适的封装复用,减少复杂系数。
3.从开发技术的层面看,前端所使用的引擎以及框架;php的引擎、扩展以及版本(php7性能很给力);基础服务的一些实现,这些都会影响到性能的优化。
4.从操作系统的层面看,资源的分配与调度,底层的驱动等等对于性能都会产生影响。
5.从底层硬件的层面看,cpu/gpu;内存/硬盘;网络情况都影响到性能。

如果你觉得有收获~可以关注我的公众号【咖啡色的羊驼】~第一时间收到我的分享和知识梳理~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值