构建速度与性能

TypePHP 的「编译速度」包含两个维度:编译期(PHP→C++→二进制)自身耗时生成产物的运行性能。本章聚焦前者——哪些环节最慢,以及已落地的优化。

Sources: docs/AOT_BUILD_SPEED_RESEARCH.md · docs/aot-optimization-priority.md

时间都花在哪

编译期主要成本:

  1. PHP 解析:每个文件被多次解析(预处理一次、转换一次)——这是主要冗余;
  2. C++ 翻译doConvert() 遍历 AST 并发射 C++;
  3. C++ 编译:大量 .cc 单元编译,受 PCH 与并行度影响;
  4. 链接:最终链接往往是大项目瓶颈之一。

Sources: docs/AOT_BUILD_SPEED_RESEARCH.md · src/Translator.php

已落地的优化

优化说明位置
S1 合并解析同一文件 AST 在进程内缓存复用(parseCachedAst),消除重复解析src/Translator.php parseCachedAst()
S2 增量对象缓存生成单元按「编译命令 + PHP ABI + 生成头内容指纹」缓存 .o,改动一处不必全量重编增量编译缓存
PCH 预编译头预编译 phpx.h 等全局头,加速每个编译单元src/Build/PrecompiledHeaderManager.php
并行编译-jpcntl 多进程编译src/Translator.php compileWithPcntl()
misc 缓存phpx 运行时源按 ABI 指纹缓存hasMiscObjectFileCache()

Sources: src/Translator.php · src/Translator.php · src/Translator.php

调试与剖析

Sources: src/compiler.php · src/Translator.php · src/Translator.php

相关阅读