How can I measure the relative performance cost of

2019-06-28 07:39发布

问题:

I'd like to know how long each hashing algorithm takes on a particular system given different dataset lengths.

回答1:

The PHP.net page for hash has some sample code in the comments that demonstrates how you can profile the various PHP hashing functions.

Here is one person's recorded times, along with some sample code on how you can replicate the test.



回答2:

I whipped up this script. I recommend playing with the $random_len value. Differing values produces some interesting results.

<?php
    $random_len = 100; /* bytes */
    $time_begin = microtime(true);
    $table_html = '';

    $algos = hash_algos();
    $fh = @fopen('/dev/urandom', 'rb');
    $random = fread( $fh, $random_len );
    $time_rand = microtime(true) - $time_begin;

    foreach ($algos as $algo) {
        $begin = microtime(true);
        $hash = hash($algo, $random);
        $end = microtime(true) - $begin;
        $table_html .= '<tr><td>' . $algo . '</td><td>' . $end . '</td><td>' . $hash . '</td></tr>';
    }
    $time_end = microtime(true) - $time_begin;
?>  
<html>
    <style>body{font-family:monospace}td{white-space:nowrap}</style>

    <h1>PHP hashing algorithm execution time</h1>
    <p>Random data length: <?php echo $random_len; ?> bytes</p>
    <p>Random data elapsed time: <?php echo $time_rand; ?> seconds</p>
    <p>Total elapsed time: <?php echo $time_end; ?> seconds</p>

    <table border=1>
        <thead><tr><th>Algorithm</th><th>Execution Time (s)</th><th>Hashed Output</th></tr></thead>
        <tbody>
            <?php echo $table_html; ?>
        </tbody>
    </table>
</html>


回答3:

See http://us.php.net/manual/en/function.microtime.php. Basically, something like this:

$input = "blah";
$start = microtime(TRUE);
for($i=0;$i<1000;$i++)
   sha1($input);
$end = microtime(TRUE);
print "Took ".($end-$start)." sec for 1000 sha1s."


标签: php testing hash