性能优化之PHP

这是在慕课网上《性能优化之php》记下来的笔记,防止遗忘。

一、语言级性能优化

1、优化点:少写代码,多用PHP自身能力
1)性能问题:自写代码冗余较多,可读性不佳,并且性能低
2)为甚么性能低:PHP代码需要编译解析成为底层语言,这一过程每次请求都会处理一边,开销大
3)好的方法:多使用PHP内置函数、变量、常量
    例如array_merged,数组合并,先插入数组1,然后数组2插入,先判断元素是否存在,存在则忽略,否则插入
2、优化点:PHP内置函数的性能优劣
1)情况描述:PHP内置函数,之间依然存在快慢差异
2)好的建议:多去了解PHP内置函数的时间复杂度
3)isset()和array_key_exists()方法间的性能差异
3、优化点:尽可能少用魔法函数
1)情况描述:PHP提供的魔法函数,性能不佳
2)为什么性能低:为了给PHP程序员省事
3)好的方法:尽可能规避使用PHP魔法函数
4、优化点:产生额外开销的错误抑制符
1)情况描述:PHP提供的错误抑制符只是为了方便懒人
2)@的实际逻辑:在代码开始前、结束后,增加opcode,忽略报错;
vId-PHP Opcode查看扩展:显示Opcode的信息显示出来
5、优化点:合理使用内存
1)情况描述:PHP有内存回收机制保底,但也请小心使用内存
2)好的建议:利用unset()及时释放不使用的内存(注:unset()出现注销不掉的情况)
6、优化点:尽量少的使用正则表达式
1)情况描述:正则表达式的回溯开销较大
2)好的建议:利用字符串处理函数,实现相同逻辑
7、优化点:避免在循环内做运算
1)情况描述:循环内的计算式将会被重复计算
2)别在for中计算count
8、优化点:减少计算密集型业务
1)情况描述:PHP不适合密集型运算的场景
2)为什么?PHP语言特性决定了PHP不适合做大数据运算(底层语言为C)
3)适用场景:适合衔接WebServer与后端服务、UI呈现
9、优化点:务必使用带引号字符串做键值
1)情况描述:PHP会将没有引号的键值当做常值,产生查找常量的开销
2)好的建议:严格使用引号作为键值

二、周边性能优化

Linux环境、PHP、硬盘、数据库、内存(缓存基于内存)、网络
DB和PHP 运行环境可以忽略,很可能是网络耗时与数据库操作耗时

1、减少文件类操作
1)常见PHP常见的开销次序:读写磁盘、读写数据库、读写内存、读写网络数据
2)读写内存(因为PHP直接通过引擎读取内存)<<读写数据库(数据库基于本地磁盘,但一般会使用热内存,缓存在内存中,异步写入磁盘)<<读写磁盘<<读写网络数据(socket,网络延迟)
2、减少PHP发起请求
1)优化网络请求
    坑:对方接口的不确定因素、网络稳定性
2)方法:
    设置超时时间:a)连接超时——不超过200ms;b)读超时——不超过800ms,最多不能大于1s多;c)写超时——不超过500ms
    将串行请求并行化:a)使用curl_multi_*(),注意当使用curl_multi_exec时,多个请求同时发起,但返回时间依赖于最长的那个请求时间,这是最简单但不是最好的;b)使用swoole扩展,推荐这个
3、压缩PHP输出的利与弊
1)如何压缩?
    使用Gzip即可
2)利:利于数据输出,client端能更快获取数据
     弊:压缩使服务端和客户端都额外的CPU开销(业务庞大的时候出现问题),当我们的数据小于几十K的时候,压缩效果不理想,若大于100K,则可以压缩会几十K
4、PHP缓存复用
1)什么情况下做输出内容的缓存:
    多次请求,内容不变的情况
    流程:X.php先查看cache,如果命中,则返回cache,否则进行计算、数据处理进入cache再返回
5、smarty调优和重叠时间窗口思想
1)Smarty开启caching
2)重叠时间窗口思想

三、PHP性能分析

1、工具XHProf(源自于Facebook的php性能分析工具)
1)php —ri xhprof检查扩展是否安装
xhprof_enable();
….
$data = xhprof_disable();//返回性能分析
include_once xhprof_lib.php;
include_once xhprof_runs.php;
$objXhprofRun = new XHProfRuns_Default();
$run_id = $objXhprofRun->save_run($data,”test”);
var_dump($run_id);
xhp,可以查看性能数据
Incl. Wall Time表示我以及我之后的所有方法的耗时
Excl Wall Time表示我的耗时
ctrl+u查看源代码
其他推荐工具

ab——压力测试
vId——opcode代码分析

四、PHP性能瓶颈解决方法

1、opcode cache:PHP扩展APC
2、pecl.php.net
3、扩展实现:通过PHP扩展代替原PHP代码中高频逻辑
4、runtime优化:HHVM(后来发力不足)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容