imooc慕课 性能优化之PHP优化 笔记
一、php性能优化初探
什么情况下,遇到了php性能问题?
php语法使用的不恰当
使用php做了它不擅长的事
用php连接的服务不给力
php自身的短板
我也不知道的问题
二、php性能问题简析
php性能问题的解决方向
三、压力测试工具简介
Apache Benchmark(ab)
简介 ab是由Apache 提供的压力测试软件。安装apache服务器时会自带该压测软件
如何使用
./ab -n100 -c10 http://www.zhangxingju.com
-n请求数 -c并发数 url目标压测地址
(ps:我的ab命令不是全局的,需要进入到apahce安装的bin目录下执行 )
四、php语言级性能优化
优化点:少写代码,多用php自身能力
性能问题:自写代码冗余较多,可读性不佳,并且性能低
好的方法:多使用php内置变量,常量,函数
例子:比如数组去重,使用php自带的函数array_unique就可以很好的完成
优化点:php内置函数的性能优劣
情况描述 php内置函数,之间依然存在快慢差异
好的建议 多去了解php内置函数的时间复杂度
例子 inset()与array_key_exists()方法间的性能差异
ps:inset的性能更好,之前完全没想到这两个其实可以实现同样的判断功能。这是所欠缺的。
优化点:尽可能少用魔法函数
情况描述 php提供的魔法函数,性能不佳
为什么性能低 为了给程序员省事,php语言为你做了很多
好的方法 尽可能规避使用php魔法函数
例子 魔法函数__get()
安装php的扩展 vld 可以查看php Opcode , Opcode是一种PHP脚本编译后的中间语言
//测试Opcode的代码
$a='zhangxingju';
echo $a;
效果如下,可以看到
优化点 产生额外开销的错误抑制符@
情况描述 php提供的错误抑制符只是为了方便“懒人”
@的实际逻辑 在代码开始前、结束后、增加Opcode,忽略报错
好的建议 建议尽量不要使用@错误抑制符
//测试@的代码
@$a='zhangxingju';
echo $a;
ps:基本不用这个@
优化点 合理使用内存
情况描述 php有内存回收机制保底,但也请小心使用内存
好的建议 利用unset()及时释放不使用的内存(注:unset() 出现注销不掉的情况)
ps:偶尔会记得用下,看来得好好分析代码 适当的地方用
优化点 尽量少的使用正则表达式
情况描述 正则表达式的回溯开销较大
好的建议 利用字符串处理函数,实现相同逻辑
ps:很少用正则 但是有时感觉只能正则才能提出要的字符
优化点 避免在循环内做运算
情况描述 循环内的计算式将会被重复计算
$str="zhangxingju.com";
for($i=0;$i<strlen($str);$i++){
//my code
}
//其中$i<strlen($str)就重复计算了 应该改为
$str="zhangxingju.com";
$strlen=strlen($str); //把这个计数赋给变量
for($i=0;$i<$strlen;$i++){
//my code
}
优化点 减少计算密集型业务
情况描述 php不适合密集型运算的场景
为什么 php语言特性决定了php不适合做大数据量运算
php适用场景 适合衔接webserver与后端服务、ui呈现
优化点 务必使用带引号字符串做键值
情况描述 php会将没有引号的键值当作常量,产生查找常量的开销
好的建议 严格使用引号作为赋值
define('key','zhangxingju.com');
$arr=[key=>'value']; //false key将识别为常量zhangxingju.com
$arr=['key'=>'value']; //true
五、php周边问题的性能优化
php周边都有什么 linux运行环境 文件存储 数据库 缓存 网络
减少文件类操作 常见php场景的开销次序
读写内存 << 读写数据库 < 读写磁盘 < 读写网络数据
优化网络请求
如何优化网络请求
1、设置超时时间
a)连接超时 200ms
b)读超时 800ms
c)写超时 500ms
2、将串行请求并行化
a)使用curl_multi_*()
b)使用swoole扩展 (ps:PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写)
压缩php接口输出
如何压缩 使用Gzip即可
压缩输出的利与弊
利 利于我们的数据输出,Client端能更快获取数据
弊 额外的cpu开销
缓存重复计算内容
什么情况下做输出内容的缓存?多次请求,内容不变情况
重叠时间窗口思想 (ps:这个没怎么懂具体实现)
旁路方案
六、php性能分析
php性能问题的具体分析
工具 XHPorf(源自fackbook的php性能分析工具 ps:好东西)
实践 通过分析wordpress程序,做优化
其他推荐工具 ab-压力测试 vld-opcode代码分析
七、php性能瓶颈解决方法
Opcode Cache:php扩展APC
扩展实现:通过php扩展代替原php代码中高频逻辑
Runtime优化:HHVM (ps:或者php7也是不错的选择)