TypePHP 的「编译速度」包含两个维度:编译期(PHP→C++→二进制)自身耗时 与 生成产物的运行性能。本章聚焦前者——哪些环节最慢,以及已落地的优化。
Sources: docs/AOT_BUILD_SPEED_RESEARCH.md · docs/aot-optimization-priority.md
编译期主要成本:
doConvert() 遍历 AST 并发射 C++;.cc 单元编译,受 PCH 与并行度影响;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 |
| 并行编译 | -j 用 pcntl 多进程编译 | src/Translator.php compileWithPcntl() |
| misc 缓存 | phpx 运行时源按 ABI 指纹缓存 | hasMiscObjectFileCache() |
Sources: src/Translator.php · src/Translator.php · src/Translator.php
--dry:只生成 C++,跳过编译/链接,用于检查翻译与定位;--profile:启用 gperftools 剖析(仅 Linux),并在 ./tpc app.prof 模式调 pprof --web;--no-progress / -j:控制进度展示与并行度。Sources: src/compiler.php · src/Translator.php · src/Translator.php