TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

2.4 KiB

构建速度与性能

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

调试与剖析

  • --dry:只生成 C++,跳过编译/链接,用于检查翻译与定位;
  • --profile:启用 gperftools 剖析(仅 Linux),并在 ./tpc app.prof 模式调 pprof --web
  • --no-progress / -j:控制进度展示与并行度。

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

相关阅读

  • 缓存机制细节 → 增量编译缓存
  • 优化器如何提升产物性能 → 优化器
  • 优先级规划 → docs/aot-optimization-priority.md