PHP 7.4 新功能一览之预加载

PHP 7.4 新功能一览之预加载

Chris Yue No Comment
Posts

在 PHP 5 年代,为了加快 PHP 的执行效率,生产机都会安装 APC 或者 Zend OpCache 之类的扩展,它们的用途都是将某个 PHP 脚本第一次运行之后的 opcode(编译之后的中间代码)缓存在内存,这个脚本在第二次运行的时候就可以跳过编译过程。

PHP 7.4 新增的预加载功能,听上去和当年 APC 做得事情很像,但实际还是有差别的。从使用角度来说,预加载功能不再判断源代码是否有更新。如果有新代码发布到生产服务器,必须重启服务;而当年 APC(当然现在的 OPcache 也类似)可以通过选项『是否检查源文件有更新』来控制这一行为。更多的不同,体现在实现上。

APC 是通过共享内存缓存(shared memory cache)来缓存 Opcode 的,这也是为什么 APC 不但可用做 Opcache 缓存,也提供了方法,利用共享内存来缓存开发者想要缓存的数据。不过实际运行代码的时候,PHP 依然需要加载这些缓存到代码运行上下文;另外由于 APC 的机制是只缓存运行过的 PHP 代码,即每个 PHP 文件都是需要单独被缓存的,所以类与类之间的关联并不保存,还是需要在运行时来决定。

记得曾几何时,Symfony 就采用将常用文件,全部拼接成一个超大 PHP 的文件的方式,以提高框架加载速度,并且官方对此的描述是,即使不开 APC,此做法提升的性能也非常显著。这下好了,在 PHP 7.4 里,你只需要设置选项 opcache.preload,指向一个 PHP 脚本,在此脚本里通过 include/require/opcache_compile_file 一些文件,来决定要将什么 PHP 脚本包含在预加载过程中。(估计这个文件实际我们都不用关心,相信 composer 很快就会跟上的)

PHP 7.4 新功能一览之预加载 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

文章可赞,扫码赏饭!
天使投赏人

发表评论

− 1 = 2