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的优化!
*
*/
PHP性能优化简述的更多相关文章
- 2020重新出发,MySql基础,性能优化
@ 目录 MySQL性能优化 MySQL性能优化简述 使用 SHOW STATUS 命令 使用慢查询日志 MySQL 查询分析器 EXPLAIN DESCRIBE 索引对查询速度的影响 MySQL优化 ...
- 手游录屏直播技术详解 | 直播 SDK 性能优化实践
在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...
- SQL Server数据库性能优化之索引篇【转】
http://www.blogjava.net/allen-zhe/archive/2010/07/23/326966.html 性能优化之索引篇 近期项目需要, 做了一段时间的SQL Server性 ...
- Android性能优化的浅谈
一.概要: 本文主要以Android的渲染机制.UI优化.多线程的处理.缓存处理.电量优化以及代码规范等几方面来简述Android的性能优化 二.渲染机制的优化: 大多数用户感知到的卡顿等性能问题的最 ...
- Web前端性能优化的9大问题
1.请减少HTTP请求基本原理:在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出.一个正常HTTP请求的流程简述:如在浏览器中输入&qu ...
- Spark实践 -- 性能优化基础
性能调优相关的原理讲解.经验总结: 掌握一整套Spark企业级性能调优解决方案:而不只是简单的一些性能调优技巧. 针对写好的spark作业,实施一整套数据倾斜解决方案:实际经验中积累的数据倾斜现象的表 ...
- [Android]Android性能优化
安卓性能优化 性能优化的几大考虑 Mobile Context 资源受限 + 内存,普遍较小,512MB很常见,开发者的机器一般比用户的机器高端 + CPU,核心少,运算能力没有全开 + GPU,上传 ...
- web前端性能优化的技巧
1. 请减少HTTP请求 基本原理: 在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出. 一个正常HTTP请求的流程简述:如在浏览器中输 ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
随机推荐
- Java技术的特点
Java技术是一套完整的IT行业解决方案,其中包含了很多技术.最初是从解决家电设备联网通讯的方案发展起来的,其特点适用于Internet,于是在Internet广泛应用的环境下,迅速发展成为一种计算机 ...
- C语言实现简单线程池(转-Newerth)
有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带来的开销,我们可以使用线程池.下面是一个C语言实现的简单的线程池. 头文件: 1: #ifndef THREAD_POOL ...
- Debian系统常用配置
每一次安装Linux之后总需要设置一下系统,下面把常用的设置总结一下,方便以后使用: 1.系统安装包选择 每一次找Linux的安装包时,总会纠结一下选哪个好,我在这里总结一下:安装Debian选择对应 ...
- Win7 远程桌面 错误代码:5 异常处理(您的远程桌面会话即将结束 此计算机的虚拟内存可能不足。请关闭其他程序,然后重试连接远程计算机。如果问题仍然存在,请联系网络管理员或技术支持。)
问题表现: 在用windows7 远程桌面连接其他电脑时,出现错误提示对话框—-标题为“严重错误(错误代码:5)”,内容为“您的远程桌面会话即将结束 此计算机的虚拟内存可能不足.请关闭其他程序,然后重 ...
- [系统开发] Django Admin上传图片简单校验
我的 models里有个ImageField字段,用来保存用户头像,希望通过Django Admin上传时校验头像大小,如果太大就报错,并且不保存. 网上有不少方法,有的通过第三方软件实现,有的通过自 ...
- overload, override和overwrite之间的区别
Overload.Overwrite和Override的概念比较容易混淆,而且Overwrite和Override的中文翻译五花八门,让人很Confuse,顾保持英文原意: Overload 重载 ...
- 【uTenux实验】信号量
信号量(semaphore)是一个用来指示可用的资源并将可用资源的数量以数值的形式表示出来的对象.当使用一组资源时,信号量用来实现互斥控制和同步.uTenux提供了信号量出来的API,可以很方便地使用 ...
- 为什么要用Maven?
早期还在学怎么用Ant构建项目时,就有看到说Maven是Ant的替代品,但真正意义去了解Maven,还是因为以前的公司一老员工在做OpenJMS二次开发时,从网上下载了源码,然后用Maven构建它. ...
- VS2013的一些常用快捷键
1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2.复制/剪切/删除整行代码 ...
- winform中DataGrid控件的宽度设置
最近修改一个win5.0的PDA程式,碰到一个问题.就是给DataGrid控件绑定数据的时候,这个控件的宽度不能调整,有时候数据较长,就显示不全.然后想在程式里自定义它的宽度,设置不成功.然后网上没找 ...