[GIT-PULLS] [php-src] PR #22932: Improve performance of json_encode() for long ASCII strings
[email protected] (ptqa) Thu, 30 Jul 2026 10:37:47 +0000
| Newsgroups | php.git-pulls |
|---|---|
| Message-ID | <[email protected]> |
Pull Request: https://github.com/php/php-src/pull/22932 Author: ptqa ## Summary Speed up `json_encode()` for long ASCII strings using `zend_simd.h`. The SIMD scanner finds the first byte requiring special handling. The safe prefix is appended in one operation, then the existing scalar encoder resumes at the special byte. Short strings, unsupported architectures, and `JSON_UNESCAPED_UNICODE` keep the existing path. No API or behavior changes. ## Benchmarks Ryzen 9 5900X, GCC 13.3, `-O2`, CPU-pinned. Median of three alternating runs; each run uses seven samples. | Workload | Before | After | Change | |---|---:|---:|---:| | ASCII, 256 B | 177.9 ns | 77.9 ns | 2.28× faster | | ASCII, 4 KiB | 3098.5 ns | 1457.8 ns | 2.13× faster | | ASCII, 64 KiB | 49191.9 ns | 22270.8 ns | 2.21× faster | | Long-ASCII record payload | 28171.8 ns | 22217.4 ns | 1.27× faster | | Sparse-escape record payload | 28483.7 ns | 22551.4 ns | 1.26× faster | | UTF-8 record payload | 78133.0 ns | 78578.1 ns | Flat | The reproducible harness is included as `ext/json/bench.php`. ## Validation - Debug suite: 13,444 passed, 0 failed. - Debug+ZTS JSON suite: 101 passed, 0 failed. - Added SIMD-boundary, escaping-option, Unicode, and invalid UTF-8 coverage. > Disclosure: This PR was created with LLM assistance and reviewed by > the contributor.