在http://www.php.net/manual/en/function.hash.php#73792上,它声明了一个测试,表明该md5()
函数比等效hash()
函数慢约 3 倍。
什么可以解释这种差异?该md5()
功能有什么不同和/或更多?
在http://www.php.net/manual/en/function.hash.php#73792上,它声明了一个测试,表明该md5()
函数比等效hash()
函数慢约 3 倍。
什么可以解释这种差异?该md5()
功能有什么不同和/或更多?
是的 100% 正确...也就是说,如果您仍在使用 PHP 早期版本,PHP
例如
PHP 5.1.2
在PHP 5.2.2
大多数最新的稳定版本中,PHP
它们是相同的,并且md5
在某些版本中运行速度稍快
您还需要注意,基准方法是错误的,改变位置会影响结果......这是获得更好结果的方法。
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>';
输出
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
)
有一样的!!!你需要用大字符串测试它来检查它,我使用这个代码:
<?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>';
?>
这是我的结果:
0.015523910522461: hash/md5
0.01521897315979: md5
0.020196914672852: hash/sha1
0.020323038101196: sha1
非常相似!!!