3v4l.org

run code in 500+ PHP versions simultaneously
<?php class Benchmark { private int $startTime; private int $endTime; public function start() { $this->startTime = hrtime(true); } public function end() { $this->endTime = hrtime(true); } public function getElapsedTime() { return round(($this->endTime - $this->startTime) / 1_000_000_000, 8); } } // Example usage $benchmark = new Benchmark(); // ==================================== // PREPARE TEST DATA function getData():array { return $people = array( array('name' => 'Kalle', 'salt' => 856412), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863), array('name' => 'Pierre', 'salt' => 215863) ); } // ==================================== $memory = memory_get_usage(); echo "Initial memory usage: " . ($memory / 1024) . " KB\n"; $benchmark->start(); // Code to benchmark $people = getData(); for ($benchIndex = 0; $benchIndex < 50000; $benchIndex++) { for($i = 0; $i < count($people); ++$i) { $people[$i]['salt'] = rand(1, 1000000); } // for($j = 0, $size = count($people); $j < $size; ++$j) { // $people[$j]['salt'] = rand(1, 1000000); // } } $benchmark->end(); $time1 = $benchmark->getElapsedTime(); echo "Elapsed time: " . $time1 . " seconds\n"; $memory = memory_get_usage(); echo "Memory usage after test 1: " . ($memory / 1024) . " KB\n"; echo "-----------------------------------\n"; $people = array( array('name' => 'Kalle', 'salt' => 856412), array('name' => 'Pierre', 'salt' => 215863) ); $memory = memory_get_usage(); echo "Initial memory usage: " . ($memory / 1024) . " KB\n"; $benchmark->start(); // Code to benchmark $people = getData(); for ($benchIndex = 0; $benchIndex < 50000; $benchIndex++) { for($j = 0, $size = count($people); $j < $size; ++$j) { $people[$j]['salt'] = rand(1, 1000000); } // for($i = 0; $i < count($people); ++$i) { // $people[$i]['salt'] = rand(1, 1000000); // } } $benchmark->end(); $time2 = $benchmark->getElapsedTime(); echo "Elapsed time: " . $time2 . " seconds\n"; $memory = memory_get_usage(); echo "Memory usage after test 2: " . ($memory / 1024) . " KB\n"; echo "Times faster: " . round($time1 / $time2, 2) . "x\n"; // assert($dates1 === $dates2, 'The two methods should produce the same result.' . var_export($dates1, true) . ' !== ' . var_export($dates2, true));

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.5.90.0320.26616.89
8.5.80.0210.27116.91
8.5.70.0160.23716.90
8.5.60.0160.24216.93
8.5.50.0170.23616.80
8.5.40.0220.23716.52
8.5.30.0150.23816.73
8.5.20.0310.25516.70
8.5.10.0160.24716.74
8.5.00.0080.26516.86
8.4.240.0250.25819.75
8.4.230.0180.24119.76
8.4.220.0310.27119.70
8.4.210.0320.25919.58
8.4.200.0150.24419.86
8.4.190.0330.24719.64
8.4.180.0130.24119.84
8.4.170.0280.25719.80
8.4.160.0180.25819.84
8.4.150.0170.23219.86
8.4.140.0170.25517.70
8.4.130.0180.25417.81
8.4.120.0320.25817.94
8.4.110.0160.25818.14
8.4.100.0150.24817.91
8.4.90.0390.26417.82
8.4.80.0300.28417.53
8.4.70.0250.26817.79
8.4.60.0160.24717.83
8.4.50.0260.25017.95
8.4.40.0210.24917.63
8.4.30.0330.25717.68
8.4.20.0250.25917.84
8.4.10.0190.26717.93
8.3.330.0150.25518.59
8.3.320.0330.26218.74
8.3.310.0160.25218.65
8.3.300.0170.24918.18
8.3.290.0180.25718.21
8.3.280.0270.26718.42
8.3.270.0150.25216.80
8.3.260.0250.26216.77
8.3.250.0180.28916.77
8.3.240.0240.26016.74
8.3.230.0300.26916.87
8.3.220.0300.26616.80
8.3.210.0160.26216.76
8.3.200.0360.28616.86
8.3.190.0220.24916.49
8.3.180.0190.24716.83
8.3.170.0170.24916.88
8.3.160.0270.25216.72
8.3.150.0280.27416.71
8.3.140.0270.26816.64
8.3.130.0150.26016.86
8.3.120.0210.25816.77
8.3.110.0260.26416.66
8.3.100.0290.25516.79
8.3.90.0180.26016.67
8.3.80.0310.24816.86
8.3.70.0320.27416.64
8.3.60.0290.25116.80
8.3.50.0270.25216.66
8.3.40.0210.26218.03
8.3.30.0150.25817.95
8.3.20.0260.27918.09
8.3.10.0160.26118.23
8.3.00.0160.26518.09
8.2.330.0170.23918.12
8.2.320.0210.25917.99
8.2.310.0170.23518.25

preferences:
62.85 ms | 797 KiB | 5 Q