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.
55 lines
2.4 KiB
55 lines
2.4 KiB
# Declaration header generation benchmark
|
|
|
|
Creates 300 PHP source files with 6,001 functions, each ordinary function
|
|
having a default parameter. It prepares and converts the project, then measures
|
|
six calls to the real declaration-header generator and discards the first as
|
|
warm-up. The timed region includes rendering and writing headers; source
|
|
preparation, conversion, and C++ compilation are excluded. This measures one
|
|
compiler phase, not total build time.
|
|
|
|
Run from a checkout with Composer development dependencies installed:
|
|
|
|
```sh
|
|
project_dir=$(mktemp -d)
|
|
php benchmark/declaration-headers/run.php "$project_dir" > /tmp/declaration-candidate.log
|
|
tail -1 /tmp/declaration-candidate.log
|
|
```
|
|
|
|
The script writes generated sources and build outputs into the supplied
|
|
benchmark directory. Reuse the same directory for comparisons: absolute source
|
|
paths contribute to header names and therefore the combined content digest.
|
|
|
|
The baseline does not contain this new benchmark. From the candidate checkout,
|
|
these commands create a separate baseline and run the same source in both. The
|
|
shared vendor directory is supported by `phpunit/bootstrap.php`'s checkout-local
|
|
source loader.
|
|
|
|
```sh
|
|
baseline_dir=$(mktemp -d)
|
|
project_dir=$(mktemp -d)
|
|
git archive b3898c32 | tar -x -C "$baseline_dir"
|
|
ln -s "$(pwd)/vendor" "$baseline_dir/vendor"
|
|
mkdir -p "$baseline_dir/benchmark/declaration-headers"
|
|
cp benchmark/declaration-headers/run.php "$baseline_dir/benchmark/declaration-headers/run.php"
|
|
php "$baseline_dir/benchmark/declaration-headers/run.php" "$project_dir" > /tmp/declaration-baseline.log
|
|
php benchmark/declaration-headers/run.php "$project_dir" > /tmp/declaration-candidate.log
|
|
tail -1 /tmp/declaration-baseline.log
|
|
tail -1 /tmp/declaration-candidate.log
|
|
```
|
|
|
|
Compare median `ms` values and require identical `headers` counts and `sha256`
|
|
digests. The digest covers the contents and names of every generated declaration
|
|
header, including runtime and aggregate headers.
|
|
|
|
## Sample result
|
|
|
|
Linux ARM64 Docker, PHP 8.5.10 ZTS, CLI opcache disabled; baseline `b3898c32`:
|
|
|
|
| Revision | Median (ms) | Headers |
|
|
| --- | ---: | ---: |
|
|
| Baseline | 88.001 | 302 |
|
|
| Grouped functions | 13.087 | 302 |
|
|
|
|
The measured phase is about 6.72x faster, with identical output digests. Raw
|
|
samples are in `results-arm64.json`. This workload isolates function-heavy
|
|
projects; class and constant declaration scans are not optimized by this change.
|
|
|