nikita popov php,PHP中对performance的考虑点

Nikita Popov 在他的演讲中谈了几个PHP 程序中和performance相关的point。

1.PHP使用shared memory, preload的方式事先分配,而只有在所有的处理结束之后,share memory 才会断开和所有进程或者thread之间的联系。

光是opcode,FPM的设定还不足以提高performance.

用class,并且尽量用继承既有class的方式创建新的class 可以比较好的利用资源

用array 比用class要消耗内存资源

PHP中有两种cache方式,一种是ACPU,一种是opcache,ACPU对于比较大的数据handle起来比较吃力,只能操作一些较小的原生的type

array 比class 要消耗内存

其中[ "foo"=>"bar", "bar"=>"baz"] 这种形式的array最为消耗内存,相比之下packed array, ["bar","baz"]略少,可以参考下图:

e5a49667d0af

memoUsage_php.png

Type check 对于比较多loop的程序反而是有优化performance作用的

通常认为不标注变量的type,php在运行的初期不做type check, 运行的performance更好,但在使用opcache的情况,做type check可以提升2.5倍的执行速度:

e5a49667d0af

typeOptimization.jpg

GC会影响程序运行,如果关闭GC,可以提升运行速度

GC的运行原理,在7.3之前是预先开了10000root buffer,然后再GC去回收7.3之后采用动态GC阈值,稍微提高了一些效率。

另外GC的mark,swap 方式,在变量count到0的情况下销毁,而对于一些传址而非传值的函数无法count 到0,可能会产生遗漏(可能会发生memory leak)

e5a49667d0af

GC.jpg

namespace的定义

一些含糊的namespace 定义使得VM查找class或者function变得迂回,建议在一些namespace面前加上\ 明确命名空间。

(这个目前7.4之后会给出compiler error提示而矫正)

e5a49667d0af

namespaceFallback.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值