While waiting for PHP 7.4 production release and its strong type new feature, I was wondering how the performance increased. A while ago I wrote a small stress test which is not the most reliable in all cases, it just points out some major changes that started occurring in PHP 7.
Since that test, PHP 7.3 was released and now there is a release candidate for 7.4. While the memory usage is the same for my test case since 7.0, the execution time looks better with every new version.
#!/usr/bin/env bash test=$(cat << 'eot' $time = microtime(true); $array = []; for ($i = 0; $i < 10000; $i++) { if (!array_key_exists($i, $array)) { $array[$i] = []; } for ($j = 0; $j < 1000; $j++) { if (!array_key_exists($j, $array[$i])) { $array[$i][$j] = true; } } } echo sprintf( "Execution time: %f seconds\nMemory usage: %f MB\n\n", microtime(true) - $time, memory_get_usage(true) / 1024 / 1024 ); eot ) versions=( 5.6 7.0 7.1 7.2 7.3 7.4-rc ) for v in "${versions[@]}" do cmd="docker run --rm -ti php:${v}-cli-alpine php -d memory_limit=2048M -r '$test'" sh -c "echo ${v} && ${cmd}" done
Results (ignore the absolute values, just watch the differences):
5.6 Execution time: 4.573347 seconds Memory usage: 1379.250000 MB 7.0 Execution time: 1.464059 seconds Memory usage: 360.000000 MB 7.1 Execution time: 1.315205 seconds Memory usage: 360.000000 MB 7.2 Execution time: 0.653521 seconds Memory usage: 360.000000 MB 7.3 Execution time: 0.614016 seconds Memory usage: 360.000000 MB 7.4-rc Execution time: 0.528052 seconds Memory usage: 360.000000 MB