为了账号安全,请及时绑定邮箱和手机立即绑定

性能优化之php优化课程-简单总结

标签:
PHP
性能优化
  • php性能问题只占整个项目的30%~40%,优化的时候不仅仅考虑代码优化,还有周边问题的性能优化;比如数据库,apache,文件存储,缓存。
  • PHP语言级性能优化:多使用PHP内置变量、常量、函数
  • php代码的运行流程:php文件->zend引擎逐行扫描->zend引擎能识别的语法->解析->Opcodes(最终拿去执行机器代码) ->执行->输出
  • php内置函数实现同样的功能,内置函数比较快,(opcodes比较少的比较快),现在php缓存都是缓存在opcodes,因为opcode缓存不需要再走扫描、理解、解析的环节
  • PHP缓存多使用opcode缓存,可以减少编译解析,提高效率加快速度。
  • 尽可能规避使用PHP魔法函数
  • 错误抑制符@应该叫警告抑制符,他吸收不了错误。
    错误抑制符原理:抑制代码执行前设置忽略一定等级警告,抑制代码执行后恢复原始设置。在开发中尽量少用@错误抑制符。可以使用try throw来抛出异常
  • 合理使用内存,使用unset()及时释放不适用的内存
  • 尽量少使用正则表达式,利用字符串处理函数,实现相同的逻辑(正则表达式的回溯开销较大,优化正则表达式需要技术活)
  • 减少计算密集型业务(大批量的日志分析、大批量数据处理、处理大数据)
  • 使用带引号字符串做键名,因为php会将没有引号的键名当做常量,产生查找常量的开销
  • 减少文件类的操作,最好使用内存和数据库进行操作,而且尽量避免使用读写磁盘和网络数据请求,尤其是对于大文件的磁盘读写和速度慢的网络请求接口。(开销:读写内存<<读写数据库<读写磁盘<读写网络数据(socket),后三个基于文件系统,数据库有其缓存系统,网络又有延迟。)
  • 优化网络请求,优化点,1:设置超时时间,2,将串行请求改为并行请求。(使用curlmulti*()函数,不过该函数的并行时间取决于最后一个返回的时间。)
  • 使用Gzip 对PHP接口输出数据进行压缩 小于几十kb压缩效果不好 大于100k可以尝试。但弊端是解压时需要额外的开销。
  • 对不经常修改但访问量大的页面或数据使用缓存。
  • PHP性能瓶颈解决的其他方案:Opcode Cache,扩展实现,Runtime优化(HHVM)。
  • php扩展网站:pecl.php.net php扩展网站
检测性能
  • 在linux中,使用命令:time php test.php 可以查看执行test.php耗时时间,主要关注user的时间。

    压力测试工具:

  • PHP性能分析工具,XHPorf,ab(压力测试),vld(opcode代码分析)。
  • 使用php扩展vld可以查看Opcode。
    命令php -dvld.active=1 -dvld.excute=0 test.php中active=1表明用vld扩展,execute-0只想查看Opcode,并不想执行。
  • apache Benchmark(ab)是由Apache提供的压力测试软件,安装apache服务器时会自带该压测软件。
    在linux下使用,输入命令:
    ./ab -n1000 -c100 目标地址(如http://www.baidu.com)
    其中-n请求数 -c并发数

我们对于性能关注的值为:
Requests per second:优化越来越大;(表示每一秒钟处理的请求数变多)
Time per request:优化为越来越小(表示每一个请求处理的时间越来越少)

  • xhporf,来自facebook的php性能分析工具,先做性能分析,再进行优化。php --ri xhprof,检查当前服务器扩展是否支持xhprof,如果输出xprof的版本,说明可以支持。xhprof_enable();开启xhprof,通过xhprof_disable()返回的性能数据,将性能数据保存在目录中。

注:该文章为观看“性能优化之php优化"课程后,大量参考学者们的笔记并加以整合的一篇文章,以供大家参考及补充。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
14
获赞与收藏
307

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消