[PHP] Zeit-Messung von Befehlen

[PHP] Zeit-Messung von Befehlen| Datum: 31.12.2009 - 19:12 | Author: Anonymous

Hi

Ich habe ein kleines Script geschrieben, mit dem man, relativ konfortbal, relativ genaue Zeitmessungen von Code durchführen kann.
Man kann mehrere Tests gleichzeitig durchführen und ihnen je einen Namen geben. Ausserdem kann man einstellen wieviele male ein test wiederholt werden soll.

Hier noch eine Online-Demo: http://huchy20.bplaced.net/test.php

Und hier mal das Script:
[syntax=php]<?php
/**
* PHP-Test-Script
* Autor: Gh0stc0der
*/

// Settings //
$loops = 1000; // Anzahl Wiederholungen je Test
$color = '#0000cc'; // Farbe des schnellsten Ergebnisses
// End Settings //

$tests = array();

// Testfield //

// Test 1
$tests[0] = array();
$tests[0]['name'] = 'echo';
$tests[0]['code'] = 'echo "Hund";';

// Test 2
$tests[1] = array();
$tests[1]['name'] = 'print()';
$tests[1]['code'] = 'print("Hund");';

// End Testfield //

$count = count($tests);
$content;

for($x = 0; $x < $count; $x++)
{
$test = $tests[$x];
$tests[$x]['result'] = array();
$tests[$x]['results']['start'] = array();
$tests[$x]['results']['end'] = array();
for($i = 0; $i < $loops; $i++)
{
ob_start();
$tests[$x]['results']['start'][$i] = microtime();

@eval($test['code']); // Code ausführen, eval stillstellen

$tests[$x]['results']['end'][$i] = microtime();
if($i == 0)
{
$content = ob_get_contents();
if($x != 0)
{
$content .= "\n".$content;
}
}
ob_end_clean();
}
}

$content = trim(str_replace("\n", '', $content));

$results = array();
foreach($tests as $one)
{
$name = $one['name'];
$start_times = array_sum($one['results']['start']);
$end_times = array_sum($one['results']['end']);
$pretime = ($end_times - $start_times);
$time = ($pretime / $loops);
$results[$name] = $time;
}

$fastest = min($results);
foreach($results as $key => $value)
{
if($value == $fastest)
{
$results[$key] = '<i class="fastest">'.$value.'</i>';
break;
}
}

ob_start();
?>
<html>
<head>
<title>Messung</title>
<style type="text/css">
body{
font-size:12px;
font-family:Arial, Verdana, Waree;
color:#000;
}

i.fastest{
color:<?php echo $color; ?>;
}

i{
color:#666;
}
</style>
</head>
<body>
<h1>Messungen</h1>
<h3>Informationen</h3>
<strong>Anzahl Wiederholungen je Test:</strong> <?php echo $loops; ?><br />
<strong>Anzahl Tests:</strong> <?php echo $count; ?><br />
Schnellster Test wird <i class="fastest">kursiv</i> dargestellt.
<h3>Ergebnisse</h3>
<ol>
<?php
foreach($results as $test => $result)
{
echo '<li><strong>'.$test.':</strong> '.$result.'</li>';
}
?>
</ol>
<h3>Ausgabe</h3>
<?php
if(empty($content))
{
echo '<i>Keine Ausgabe</i>';
}
else
{
echo '<pre>'.$content.'</pre>';
}
?>
</body>
</html>
<?php
ob_end_flush();
?>[/syntax]

greez

Gh0stc0der