PHP性能优化
一 什么情况下会产生性能问题
1.php语法使用不恰当
2.使用php做了它不擅长的事
3.php语言连接的服务不给力
4.php自身的缺陷
5.其他问题
二 为什么要解决php性能问题
项目中或多或少都会有一些性能问题,php性能问题是其中一部分,占比一般30%-40%
三 php性能优化的解决方向
php语言级的优化
1.少写代码,多用php自身能力 代码越长,执行时间越长
1)使用内置函数,常量,变量 我们编写的代码要经过逐行检索然后放到自身引擎中,通过引擎编译最后执行,使用内置函数变量 预编译好的,节省编译时间,性能有了提升
2)尽可能少用魔法函数 魔法函数性能并不佳,耗时较长
3)错误抑制符 在底层操作代码会多出begin_silence和end_silence,会产生额外的开销,降低性能
2.合理使用内存 大量使用内存会导致php运行缓慢,需要及时释放,小心使用内存。 可以利用unset()及时释放不使用的内存
3.少用正则表达式 性能简单,需要回溯,开销大,性能低。可以利用字符串函数,代替正则
4.避免在循环里面进行运算 可以将计算的表达式放到循环外,赋值给一个变量,再循环内直接使用变量
5.减少密集型运算的业务 php适合衔接webserver和后端以及ui呈现,作为一个纽带的作用。webserver来请求,交给php,php做一些参数处理,将请求发给后端,等待后端相应,再将信息传递给webserver
6.务必使用带引号的字符串来做键值 php会把没有引号的键当作值常量,然后找常量,把这个常量当作key值输出,会产生额外的开销
php周边问题的优化
周边的服务:网络环境,服务器环境,数据库环境等
优化分类:
1.减少文件类的操作 读写内存<<读写数据库<读写磁盘<读写网络数据 最好从内存中读取数据
2.优化网络请求
1)设置超时时间(连接超时 200ms,读超时 800ms,写超时 500ms)
2)将串行请求并行化 使用curl_multi函数
3.压缩php接口输出 有利于数据输出,客户端能更快获得数据 压缩占用服务器cpu,会给cpu增加额外开销,重复字符多,压缩效果较好
4.缓存重复计算内容 多次请求,内容不变
接收请求,查看缓存,没有缓存,进行查询,返回给缓存,返回
接收请求,查看缓存,有缓存,返回
缓存常用于项目中的模板 smarty支持caching cache_start
5.重叠时间窗口思想 执行完所有项目耗时少 当后面的项目不依赖前一个项目时可用
6.旁路方案 后面项目不依赖于前一项目可用,可以有多个旁路
场景:smarty模板渲染和拼接
php语言自身的分析,优化 底层C语言的分析优化
利用opcode cache:可以用php扩展apc框架
opcode cache:当解释器完成对代码的分析后,将他们生成可以直接运行的操作码。目的是避免重复编码,减少cpu和内存开销
php性能问题的具体分析
工具:XHProf facebook开源的一个php轻量级的性能分析工具
性能开销低,可以用在生产环境中,可以由程序开关控制是否进行profile