PHP 中的 JIT(即时)编译器的工作方式与其他解释型编程语言中的相同。它在程序启动后运行并动态编译代码(在运行时)。
在 PHP8 中 JIT 会省略Zend VM,如果编译后的代码已经缓存,它会直接发送到 CPU。它将不依赖于 C 语言,该语言将有能力开发自己的新功能。
PHP8 中的 JIT 不会改变性能。它会稍微改进它,但不会像 PHP7 那样显着。已经有一些基准测试表明,在基本基准测试(CPU 密集型任务)中的性能要好得多,但在实际使用的应用程序中并没有太大变化。
CPU 密集型任务:
- 在 Nikita Popov 制作的基准测试中,nikic/PHP-Parser 的运行速度提高了约 1.3 倍
- 使用Amp编写的 hello world 应用程序的速度提高了约 5%
- MessagePack 基准测试显示速度提高了 1.3 到 1.5 倍
新鲜 laravel 网页的结果:
- PHP 7.3:131.37 请求/秒
- PHP 8.0 + JIT:133.57 请求/秒
相对 JIT 对 PHP 8 性能源的贡献
- 它为 PHP 被用作网络之外的高性能语言打开了大门。
- 随着时间的推移,JIT 可以得到改进,我们的代码也可以。
如果 PHP 代码可以在运行时避免 VM 进行解释,则意味着 PHP 本身在未来有更多机会执行 CPU 密集型任务,例如机器学习。
PHP 中有多种类型的 JIT 配置。您可以设置优化级别、触发器、寄存器分配和 CPU 特定的优化标志。我不会粘贴所有内容,但可能会在文档中找到(目前还没有官方 JIT 文档,只有 RFC)。