[php-src] Issue #24183: Benchmark CI builds Symfony Demo without ext-intl, so 18% of the request is a polyfill
| From: | ArtUkrainskiy | Date: | Wed, 07 Oct 2026 21:19:47 +0000 |
| Subject: | [php-src] Issue #24183: Benchmark CI builds Symfony Demo without ext-intl, so 18% of the request is a polyfill | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-252937@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/24183
Author: ArtUkrainskiy
### Description
The BENCHMARKING job in
test-suite.yml configures without --enable-intl
(no libicu-dev in its apt list either), unlike the test jobs. Symfony Demo then runs
symfony/polyfill-intl-* for date formatting, ICU messages and
symfony/string; the grapheme polyfill does preg_match_all('/\X/u',
…) once per grapheme, 17.8K matches per request.
Callgrind on the job's exact extension set (reproduces the CI counts within 0.5%) vs the same
build with ext-intl:
| Symfony Demo | instructions per request | PCRE share |
|---|---|---|
| as in CI | 39,427,533 | 19.5% |
| with ext-intl | 31,533,221 (−20%) | 1.6% |
preg_match_all() alone is 18% of the official number. A Symfony deployment doesn't
run that path — the polyfill is the fallback — so a fifth of the benchmark moves with
PCRE's global-match loop and \X and says nothing about the engine. bench.php and
WordPress are unaffected.
I'd add libicu-dev and --enable-intl to the job. The cost is a −20%
step in the Symfony history at the switch, worth a note in the results. I can send the workflow
change if that's acceptable.