一.语言性能优化
1.使用Apache下的ab工具进行性能测试测试:ab -n100 -c100 https://www.baidu.com/(请求100次,并发量是100)
关注两个量:
Requests per second(每秒请求数 )和Time per request(平均响应时间)
2.尽量使用php内置变量,常量,函数,原因:php代码需要经过zend引擎独行扫描成zend可识别语法,再被解析成opcode代码,然后才被执行。
3.内置函数也有优劣之分,要懂得使用性能高的函数,了解函数实现的时间复杂度,以isset和array_key_exists两个函数为例。
4.尽可能规避php的魔法函数。
5.禁止错误抑制符@的使用,原因是会在该语句前后插入一些代码。使用工具vld,查看php的opcode。
6.合理使用内存(建议用unset释放变量)
7.合理使用正则表达式(原因是需要回溯)
8.避免在循环里面计算,例子:for($i=0;$i<strlen($str);$i++){ //do something;}
9.减少计算密集型业务。原因:php的语言特点决定的,php是由c语言写的,处于上层,实现的话都要通过c来运行,只是一个纽带作用。php擅长的是衔接webserver与后端服务,UI展示。所以密集型业务最好是通过其它语言来实现,不然会成为性能瓶颈。
10.务必使用带引号字符串做键值。不然php会先去找常量值,如若找不到才会当成字符串来处理,这需要额外开销。
二.周边性能优化
1.Linux环境;
2.文件存储(硬盘);
3.数据库;
4.内存缓存(memcache,redis)
5.网络
建议采用以下方式优化:
1.减少文件类操作,按开销大小排序是:读写内存<<读写数据库<读写磁盘<读写网络数据(socket),读写内存最快,数据库有其缓存系统,网络又有延迟。
2.优化网络请求:
原因:1.对方接口的不确定性;2.网络的稳定性
优化方式:
2.1.设置超时时间(a连接超时;b读超时;c写超时);
2.2.将串行请求并行化;
a)使用curl_multi_*();
b)使用swoole扩展。
3.压缩PHP接口输出:
使用Gzip压缩
利:有利于client端更快接收数据;
弊:额外的cpu开销
4.缓存重复计算内容:多次请求,内容不变的情况下;
5.smarty调优和时间窗口重叠思想(后一个任务不强依赖前一个任务的情况下可使用),并行缩短运行时间。
6.使用xhprof工具分析性能;
三.php性能瓶颈解决方法
扩展实现:通过PHP扩展代替原PHP代码中高频业务逻辑
Runtime优化:HHVM