php性能优化
慕课网 Pangee http://www.imooc.com/learn/205
- 项目中是否遇到了性能问题
什么情况下会遇到性能问题
php语法使用不恰当
使用php语言做了它不擅长的事
用php连接的服务不给力
php自身的短板(自身无法做)
我们暂时不知道的(解决问题的能力)你已经有了靠谱的解决办法了么
php的性能问题占整体项目性能问题的比例小于50%, 在20%~30%, 所以不局限于优化php
php性能问题的解决方向
不局限于优化php, php的性能问题占整个网站的比例<50%
- php语言及的性能优化(能快速直观的看到效果)
- php周边问题的性能优化(网络环境/ 服务器环境)
- php语言自身分析与优化
抓住问题: 要注意区分性能的问题到底是出在 php本身, 还是 php连接的周边服务
压力测试工具: Apache benchmark(ab), window下在 Apache 的安装目录中的 bin 目录
vld: 用来查看php生成的opcode代码
XHRPorf(源自fb的php性能分析工具): 查看图形分析的时候, 标为红色的, 就是性能不理想的地方
关注的数据: rps(request per second), tpr(time per request)
php语言级优化
- 少些代码, 多用php自身能力
测试: 自己写代码实现数组合并 & array_merge()
自写的代码冗余较多, 可读性不佳, 并且性能低
原因-php代码运行流程: php文件 -> scanner(zend) -> exprs -> parser(zend) -> opcode -> exec -> output
建议: 多使用php内置的变量, 常量, 函数
php内置函数的性能比较: isset(arr[$i]) & array_key_exists(arr[$i])
魔方函数: 性能较普通函数低
少使用@: 实现逻辑是在代码开始前和结束后增加opcode, 忽略报错
合理使用内存: php有内存回收机制, 但是也要小心使用内存, 及时使用 unset() 来回收(还有使用 unset() 无法回收的情况)
正则: 很方便, 但是效率可能不高, 因为正则需要使用到回溯, 这个需要一定的经验积累
避免在循环中使用计算
减少计算密集型业务: php适合衔接webserver与后端服务, UI呈现
数组索引带上引号: 不使用引号, php会当作常量进行查询, 再才会当作字符串来使用
ab -n1000 -c100 http://www.baidu.com # n 请求数 c 并发数php --ri xhprof // 查看xhprof是否可用for($i=0; $i<strlen($str); $i++) // 每次循环都会重复计算 strlen($str)define('key', 'imooc');$arr = ['key' => 'hello', 'imooc' => 'world']; // $arr[key] == $arr['imooc']