• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • JIT 即时编译

    JIT(Just-In-Time)即时编译器。JIT 可以通过将 PHP 应用程序的全部或经常调用的部分作为 CPU 机器代码编译并存储并直接执行,从而绕过 Zend VM 及其过程开销,从而提高性能。JIT 是传统解释器和 AOT 编译器的混合体。混合模型带来了这两种方法的利弊,而经过微调的应用程序可以胜过 JIT 的弊端。

    大多数 PHP 应用程序都接受 HTTP 请求,从数据库中检索和处理数据,并返回结果。IO 通常是重要的性能瓶颈:从磁盘读取数据,写入和网络请求。PHP 8.0 引入了 JIT,以提高 PHP 应用程序的性能,但它也增加了调试的障碍,因为应用程序的某些部分可能作为 CPU 机器代码缓存,而标准 PHP 调试器无法使用。PHP 8.0 的 JIT pull-request 在 PHP 代码库中增加了 50,000 多个新行,因此,除了从事 JIT 的开发人员之外,PHP 核心开发人员本身可能并不精通。


    左图是 PHP8 之前的 Opcache 流程示意图,右图是 PHP8 中的 Opcache 示意图,可以看出几个关键点:

    • Opcache会做 opcode 层面的优化,比如图中的俩条 opcode 合并为一条。
    • JIT 目前是在 Opcache 之中提供的。
    • JIT 在 Opcache 优化之后的基础上,结合 Runtime 的信息再次优化,直接生成机器码。
    • JIT 不是原来 Opcache 优化的替代,是增强。

    上篇:Zend 引擎

    下篇:opcache 优化