RaDo Priemer: 0.025474982261658 Standardna odchylka: 0.046278587294513 Johno Priemer: 0.015259630680084 Standardna odchylka: 0.000426877124643
Zdroják:
<?php
/**
* @author Jan "johno" Suchal
*/
class Timer {
var $start;
function start() {
$this->start = $this->getMicrotime();
}
function stop() {
return ($this->getMicrotime() - $this->start);
}
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return ((float)$usec + (float)$sec);
}
} // end class Timer
function sqr($num) {
return $num * $num;
}
class Statistics {
var $data;
var $name;
var $precision;
function Statistics($name, $precision = 15) {
$this->name = &$name;
$this->precision = &$precision;
$this->data = array();
}
function reset() {
$this->data = array();
}
function add($item) {
$this->data[] = &$item;
}
function getResults() {
$sum = 0;
$count = count($this->data);
if(!$count) return;
for($i = 0; $i < $count; $i++) {
$item = &$this->data[$i];
$sum += $item;
}
$mean = $sum / $count;
$deviation = 0;
for($i = 0; $i < $count; $i++) {
$deviation += sqr($this->data[$i] - $mean);
}
$deviation = sqrt($deviation / $count);
printf("%s\nPriemer: %.{$this->precision}f Standardna odchylka: %.{$this->precision}f\n\n", $this->name, $mean, $deviation);
}
} // end class Statistics
function rado(&$data) {
$s = '';
foreach($data as $key => $val)
$s.=$key.'='.urlencode($val).'&';
$s = substr($s, 0, -1);
}
function johno(&$data) {
$s = null;
foreach($data as $key => $val) {
if($s !== null) $s .= '&';
$s .= $key.'='.urlencode($val);
}
}
$data = array(
'rado' => ' ano, to by mohlo být o 0.00000001 sekund rychlejší, pokud vu*bec, nicméne(, pak to bude c(ekat 10 sekund na curl_exec ;)',
'rado2' => ' vsadím se klidne( o $1, že to moje r(ešení je rozhodne( nejrychlejší :-)',
'dgx' => ' o rychlosti if($s !== null) bych si u PHP pr(íliš iluze nede(lal, pr(ece jen, je to skriptovaný jazyk. Ale líbí se mi Tvé uvažování ;-) Entita & do kódu nepatr(í. Nahrazení & za & se provádí až te(sne( pr(ed odesláním r(ete(zce na HTML výstup funkcí HTMLSpecialChars. V tomto pr(ípade( žádný HTML výstup není tr(eba, takže zu*stane u &)',
'johno' => ' No to asi ne. Jedine, že by bol substr() rýchlejší ako N krát vyhodnotenie podmienky if($s !== null), kde N je dlžka pol(a $data.Osobne si myslím, že pre N < 1000 to asi nenastane. :-)Inak máš tam ešte bug. $regbody asi malo byt( $s a tiež som si neni istý c(i & nemá byt( &V každom prípade toto ladenie a c(ac(kanie je taký kóderský fetiš, ktorého sa odvtedy ako som sa stretol s asemblerom nemôžem zbavit(.',
'johno2' => 'Pre aké N(spomínané hore), Radku?',
'MiroslavNavratil' => 'Hehe, $1 ... Ten film znám, nevíš náhodou jak se menuje? ;)'
);
$timer = & new Timer();
$radoStats = & new Statistics('RaDo');
$johnoStats = & new Statistics('Johno');
$dummyStats = & new Statistics('dummy');
$dummyStats->add(1.5);
// pocet merani
$iterationsCount = 50;
// pocet spusteni funkcie v jednom merani
$subIterationsCount = 1000;
// php asi nieco alokuje pri prvom spustani funkcii lebo to hadzalo divne casy
// okaslal som to spustenim 'zahrievacich testov'
for($i = 0; $i < 100; $i++) {
$timer->start();
johno($data);
$johnoStats->add($timer->stop());
$timer->start();
rado($data);
$radoStats->add($timer->stop());
}
$johnoStats->reset();
$radoStats->reset();
for($i = 0; $i < 100; $i++) {
$timer->start();
for($j = 0; $j < $subIterationsCount; $j++) {
johno($data);
}
$johnoStats->add($timer->stop());
}
for($i = 0; $i < $iterationsCount; $i++) {
$timer->start();
for($j = 0; $j < $subIterationsCount; $j++) {
rado($data);
}
$radoStats->add($timer->stop());
}
echo '<pre>';
$radoStats->getResults();
$johnoStats->getResults();
echo '</pre><p>Zdroják:</p>';
highlight_file(__FILE__);
?>