mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
![]() There are two hot spots on my machines: 1. We copy the string because the internal PHP API works in-place. 2. The conversion of hex characters is slow due to going through the C locale handling. This patch resolves the first hot spots by introducing 2 new internal APIs that avoid the redundant copy and allocate an empty string upfront. The second hotspot is resolved by having a specialised htoi handler. For the following benchmark: ```php $encoded = "Hello%20World%21+This%20is%20a%20test%3A%20%40%23%24%25%5E%26*%28%29"; for ($i=0;$i<2000000;$i++) { rawurldecode($encoded); urldecode($encoded); } ``` On an i7-4790: ``` Benchmark 1: ./sapi/cli/php x.php Time (mean ± σ): 364.8 ms ± 3.7 ms [User: 359.9 ms, System: 3.3 ms] Range (min … max): 359.9 ms … 372.0 ms 10 runs Benchmark 2: ./sapi/cli/php_old x.php Time (mean ± σ): 565.5 ms ± 4.9 ms [User: 561.8 ms, System: 2.5 ms] Range (min … max): 560.7 ms … 578.2 ms 10 runs Summary ./sapi/cli/php x.php ran 1.55 ± 0.02 times faster than ./sapi/cli/php_old x.php ``` On an i7-1185G7: ``` Benchmark 1: ./sapi/cli/php x.php Time (mean ± σ): 708.8 ms ± 6.1 ms [User: 701.4 ms, System: 6.3 ms] Range (min … max): 701.9 ms … 722.3 ms 10 runs Benchmark 2: ./sapi/cli/php_old x.php Time (mean ± σ): 1.311 s ± 0.019 s [User: 1.300 s, System: 0.008 s] Range (min … max): 1.281 s … 1.348 s 10 runs Summary ./sapi/cli/php x.php ran 1.85 ± 0.03 times faster than ./sapi/cli/php_old x.php ``` Closes GH-18378. |
||
---|---|---|
.. | ||
bcmath | ||
bz2 | ||
calendar | ||
com_dotnet | ||
ctype | ||
curl | ||
date | ||
dba | ||
dl_test | ||
dom | ||
enchant | ||
exif | ||
ffi | ||
fileinfo | ||
filter | ||
ftp | ||
gd | ||
gettext | ||
gmp | ||
hash | ||
iconv | ||
intl | ||
json | ||
ldap | ||
libxml | ||
mbstring | ||
mysqli | ||
mysqlnd | ||
odbc | ||
opcache | ||
openssl | ||
pcntl | ||
pcre | ||
pdo | ||
pdo_dblib | ||
pdo_firebird | ||
pdo_mysql | ||
pdo_odbc | ||
pdo_pgsql | ||
pdo_sqlite | ||
pgsql | ||
phar | ||
posix | ||
random | ||
readline | ||
reflection | ||
session | ||
shmop | ||
simplexml | ||
skeleton | ||
snmp | ||
soap | ||
sockets | ||
sodium | ||
spl | ||
sqlite3 | ||
standard | ||
sysvmsg | ||
sysvsem | ||
sysvshm | ||
tidy | ||
tokenizer | ||
xml | ||
xmlreader | ||
xmlwriter | ||
xsl | ||
zend_test | ||
zip | ||
zlib | ||
ext_skel.php |