Benchmarking tool
Twee kleine functies (benchMark en convertBytes) om je PHP pagina's of scripts te benchmarken op tijd en op gebruik van server geheugen. function benchMark($action, $name = FALSE, $show = FALSE) argumenten: - $action (start, status, stop, short_summary, long_summary) - $name (naam van de benchmark) - $show (als je TRUE mee geeft worden de huidige waarden van deze benchmark getoond, ander geeft retourneerd de functie TRUE) start een benchmark als volgt: benchMark('start','benchmark_naam'); als je tussen tijds wild weten wat de benchmark nu is gebruik je: echo benchMark('status','benchmark_naam', TRUE); stoppen van een benchmark als volgt: benchMark('stop','benchmark_naam'); Als je aan het einde van je script/pagina een overzicht wild hebben van alle benchmarks gebruik je argument $action met de waarde long_summary. echo benchMark('long_summary'); Als je short_summary meegeeft krijg je een totaal terug en ruimt hij de global $benchMarks op, ok leegt hij het ;) echo benchMark('short_summary'); de functie convertBytes is er alleen voor omzetting van de bytes naar de hoogst mogelijke opslageenheid Ik hoop dat dit script jullie kan helpen!
<?php
/*
Function benchMark
- serverside benchmark
- short_summary will also clean up the global $benchMark
*/
function benchMark($action, $name = FALSE, $show = FALSE) {
global $benchMarks;
$timeNow = microtime(true);
$timeDiff = 0;
$memoryNow = memory_get_usage();
$memoryDiff = 0;
switch($action) {
case "start": // start benchmark
$benchMarks[$name]["start_time"] = $timeNow;
$benchMarks[$name]["start_memory"] = $memoryNow;
return (!$show)? TRUE : "Benchmark ".$name." (".$action.") - Time Expired: ".round($timeNow,3)." seconds, Memory Usage: ".convertBytes($memoryNow)."\r\n";
break;
case "status": // show status of benchmark til now without stopping it
$timeDiff = ($timeNow - $benchMarks[$name]["start_time"]);
$memoryDiff = ($memoryNow - $benchMarks[$name]["start_memory"]);
return (!$show)? TRUE : "Benchmark ".$name." (".$action.") - Time Expired: ".round($timeDiff,3)." seconds, Memory Usage: ".convertBytes($memoryDiff)."\r\n";
break;
case "stop": // stop the benchmark
$benchMarks[$name]["end_time"] = $timeNow;
$benchMarks[$name]["end_memory"] = $memoryNow;
$timeDiff = ($benchMarks[$name]["end_time"] - $benchMarks[$name]["start_time"]);
$memoryDiff = ($benchMarks[$name]["end_memory"] - $benchMarks[$name]["start_memory"]);
return (!$show)? TRUE : "Benchmark ".$name." (".$action.") - Time Expired: ".round($timeDiff,3)." seconds, Memory Usage: ".convertBytes($memoryDiff)."\r\n";
break;
case 'short_summary': // calculate benchmark totals, all benchmark have to be stopted
case 'long_summary': // show each benchmark (separate), all benchmark have to be stopted
default:
$returnValue = '';
foreach($benchMarks AS $key => $valueArray) {
/* check if items are set */
if(!isset($valueArray["start_time"])) {
return 'Benchmark start time not set for '.$key."\r\n";
} elseif(!isset($valueArray["end_time"])) {
return 'Benchmark end time not set for '.$key."\r\n";
} elseif(!isset($valueArray["start_memory"])) {
return 'Benchmark start memory not set for '.$key."\r\n";
} elseif(!isset($valueArray["end_memory"])) {
return 'Benchmark end memory not set for '.$key."\r\n";
}
if($action == 'short_summary') {
$timeDiff += ($valueArray["end_time"] - $valueArray["start_time"]);
$memoryDiff += ($valueArray["end_memory"] - $valueArray["start_memory"]);
} elseif($action == 'long_summary') {
$timeDiff = ($valueArray["end_time"] - $valueArray["start_time"]);
$memoryDiff = ($valueArray["end_memory"] - $valueArray["start_memory"]);
$returnValue .= "Benchmark ".$key." (".$action.") - Time Expired: ".round($timeDiff,3)." seconds, Memory Usage: ".convertBytes($memoryDiff)."\r\n";
} else {
return 'Benchmark Error: missing action!'."\r\n";
}
}
if($action == 'short_summary') {
$benchMarks = ''; // little clean up
return "Benchmark ".$action." - Time Expired: ".round($timeDiff,3)." seconds, Memory usage: ".convertBytes($memoryDiff)."\r\n";
} elseif($action == 'long_summary') {
return $returnValue;
} else {
return 'Benchmark Error!'."\r\n";
}
break;
}
}
/*
Function convertBytes
- bytes to the highest storage capacity type)
*/
function convertBytes($size) {
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
?>
Reacties
0