On http://www.php.net/manual/en/function.hash.php#73792 it states a test which shows that the md5()
function is about 3 times slower than the equivalent hash()
function.
What can explain this difference? What does the md5()
function do differently and / or more?
Yes 100% correct ... that is if you are still using PHP early version of PHP
such as
PHP 5.1.2
to PHP 5.2.2
in most resent stable version of PHP
they are the same and md5
run slightly faster in some versions
Here is a simple test in most PHP version
You also need to note that bench mark method is wrong and changing position affect the result ... This is how to get better result .
set_time_limit(0);
echo "<pre>";
function m1($total) {
for($i = 0; $i < $total; $i ++)
hash('md5', 'string');
}
function m2($total) {
for($i = 0; $i < $total; $i ++)
md5('string');
}
function m3($total) {
for($i = 0; $i < $total; $i ++)
hash('sha1', 'string');
}
function m4($total) {
for($i = 0; $i < $total; $i ++)
sha1('string');
}
function m5($total) {
for($i = 0; $i < $total; $i ++)
hash('md5', $i);
}
function m6($total) {
for($i = 0; $i < $total; $i ++)
md5($i);
}
function m7($total) {
for($i = 0; $i < $total; $i ++)
hash('sha1', $i);
}
function m8($total) {
for($i = 0; $i < $total; $i ++)
sha1($i);
}
$result = array(
'm1' => 0,
'm2' => 0,
'm3' => 0,
'm4' => 0,
'm5' => 0,
'm6' => 0,
'm7' => 0,
'm8' => 0
);
$total = 10000;
for($i = 0; $i < 100; ++ $i) {
foreach ( array_keys($result) as $key ) {
$alpha = microtime(true);
$key($total);
$result[$key] += microtime(true) - $alpha;
}
}
echo '<pre>';
echo "Single Run\n";
print_r($result);
echo '</pre>';
Output
Single Run
Array
(
[m1] => 0.58715152740479 <--- hash/md5/string
[m2] => 0.41520881652832 <--- md5/string
[m3] => 0.79592990875244 <--- hash/sha1/string
[m4] => 0.61766123771667 <--- sha1/string
[m5] => 0.67594528198242 <--- hash/md5/$i
[m6] => 0.51757597923279 <--- md5/$i
[m7] => 0.90692067146301 <--- hash/sha1/$i
[m8] => 0.74792814254761 <--- sha1/$i
)
Live Test
There are the same!!! you need to test it with large string to check it, i use this code:
<?php
$s="";
for ($i=0;$i<1000000;$i++)
$s.=$i;
$time=microtime(1);
hash('md5', $s);
echo microtime(1)-$time,': hash/md5<br>';
$time=microtime(1);
md5($s);
echo microtime(1)-$time,': md5<br>';
$time=microtime(1);
hash('sha1', $s);
echo microtime(1)-$time,': hash/sha1<br>';
$time=microtime(1);
sha1($s);
echo microtime(1)-$time,': sha1<br>';
?>
and this is my result:
0.015523910522461: hash/md5
0.01521897315979: md5
0.020196914672852: hash/sha1
0.020323038101196: sha1
Very similar!!!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With