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