Benchmarking PHP code

Have you ever asked yourself, “I wonder which of these blocks of code will run
faster?” I know I have and I use a very basic template for setting up these
benchmarking experiments. The gist of the script is to run through each block
of code n times tracking the amount of time and memory it took to run. It’s
not nearly as complete as it could be, but it serves as a good enough starting
point for doing some quick tests.

<?php

$n = 1000000

$start_time = microtime(true
$start_mem  = memory_get_usage(true

for ($i = 0 $i < $n $i++)
{

}

$time = microtime(true) - $start_time
$mem  = memory_get_usage(true) - $start_mem

echo "Test 1t{$time}t{$mem}n"

You can duplicate the test block as many times as you need it. Here’s a working
benchmark I wrote to see if PHP’s built-in array_keys function was actually
faster than doing a foreach:

<?php

$n = 1000000

$array = [
    'one'   => 'This is the first',
    'two'   => 'This is the second',
    'three' => 'This is the third',
    'four'  => 'This is the fourth',
    'five'  => 'This is the fifth',


$start_time = microtime(true
$start_mem  = memory_get_usage(true

for ($i = 0 $i < $n $i++)
{
    unset($array_keys
    $array_keys = array_keys($array
}

$time = microtime(true) - $start_time
$mem  = memory_get_usage(true) - $start_mem

echo "array_keys()t{$time}t{$mem}n"

$start_time = microtime(true
$start_mem  = memory_get_usage(true

for ($i = 0 $i < $n $i++)
{
    unset($array_keys

    foreach ($array as $key => $value)
    {
        $array_keys[] = $key
    }
}

$time = microtime(true) - $start_time
$mem  = memory_get_usage(true) - $start_mem

echo "foreach()t{$time}t{$mem}n"

One improvement would be to track the average time per iteration as well as the
fastest and slowest iteration. I went ahead and threw the code in a
GitHub gist in case anyone wants to fork and improve upon it.

Josh Sherman - The Man, The Myth, The Avatar

About Josh

Husband. Father. Pug dad. Musician. Founder of Holiday API, Head of Engineering and Emoji Specialist at Mailshake, and author of the best damn Lorem Ipsum Library for PHP.


If you found this article helpful, please consider buying me a coffee.