1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 08:12:21 +01:00
Files
archived-php-src/ext
Niels Dossche 6c0578d31c Improve performance of urldecode() and rawurldecode()
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.
2025-04-24 22:14:55 +02:00
..
2025-04-22 17:11:32 +01:00
2025-04-05 18:33:12 +01:00
2025-03-14 10:51:50 +01:00
2025-04-23 18:30:05 +02:00
2025-04-07 18:47:06 +02:00
2025-04-24 11:28:47 +02:00
2025-04-11 23:36:42 +02:00
2025-03-08 12:27:56 +01:00
2025-04-16 11:41:33 +02:00
2025-04-07 13:01:52 +01:00
2025-03-16 14:26:38 +01:00
2025-04-19 13:26:09 +01:00
2025-04-21 13:15:50 +02:00
2025-04-11 21:04:24 +02:00
2025-04-11 23:36:42 +02:00
2025-04-19 14:11:35 +09:00
2025-04-21 17:47:55 +02:00
2025-02-16 00:17:12 +01:00
2025-04-11 23:57:03 +02:00
2025-04-11 23:36:42 +02:00
2025-03-21 08:26:04 +01:00
2025-04-14 14:11:40 +02:00
2025-03-24 19:35:30 +01:00
2025-04-23 22:10:13 +02:00
2025-04-11 23:36:42 +02:00
2025-02-22 16:00:45 +01:00
2025-04-16 10:46:23 +02:00