Mailinglisten-Archive |
Yannik Hampe schrieb:
> meineFunktion();
> meineKlasse::meineFunktion();
> $meinObjekt->meineFunktion();
>
> wird von oben nach unten immer langsamer. Und zwar auf 10k Durchläufen
> auch wieder sowas wie 10ms / 15ms / 20ms. Also nurmal grob, dass ich das
> gemacht habe ist schon was länger her...
hab das mal 'überprüft' ;-)
zumindest bei meiner PHP Version 5.2.0 Windows mod
tauschen Klasse::methode() und $objekt->methode() die Plätze ...
5.2.0
array(6) {
["100000 x test()"]=>
float(0.110367059708)
["100000 x Test::test()"]=>
float(0.212041854858)
["100000 x $test->test()"]=>
float(0.150419950485)
["100000 x test() in multiTest()"]=>
float(0.130726099014)
["100000 x Test::test() in Test::multiTestStatic()"]=>
float(0.23764705658)
["100000 x $this->test() in $test->multiTest()"]=>
float(0.169038057327)
}
<?php
function test()
{
return 1 + 1;
}
function multiTest()
{
$start = microtime(true);
for ($i = 0; $i < $GLOBALS['loops']; $i++) {
test();
}
return microtime(true) - $start;
}
class Test
{
public function __construct() {}
public static function testStatic()
{
return 1 + 1;
}
public function test()
{
return 1 + 1;
}
public static function multiTestStatic()
{
$start = microtime(true);
for ($i = 0; $i < $GLOBALS['loops']; $i++) {
Test::testStatic();
}
return microtime(true) - $start; }
public function multiTest()
{
$start = microtime(true);
for ($i = 0; $i < $GLOBALS['loops']; $i++) {
$this->test();
}
return microtime(true) - $start;
}
}
$loops = 100000;
$times = array();
$test = new Test;
$start = microtime(true);
for ($i = 0; $i < $loops; $i++) { test(); }
$times[$loops . ' x test()'] = microtime(true) - $start;
$start = microtime(true);
for ($i = 0; $i < $loops; $i++) { Test::testStatic(); }
$times[$loops . ' x Test::test()'] = microtime(true) - $start;
$start = microtime(true);
for ($i = 0; $i < $loops; $i++) { $test->test(); }
$times[$loops . ' x $test->test()'] = microtime(true) - $start;
$times[$loops . ' x test() in multiTest()'] = multiTest();
$times[$loops . ' x Test::test() in Test::multiTestStatic()'] =
Test::multiTestStatic();
$times[$loops . ' x $this->test() in $test->multiTest()'] = $test->multiTest();
echo phpversion() . '<pre>';
var_dump($times);
?>
--
Sebastian Mendel
www.sebastianmendel.de
php::bar PHP Wiki - Listenarchive