phpbar.de logo

Mailinglisten-Archive

[php] Performance-Probleme, war: Array-Funktionen vs. literale Angabe

[php] Performance-Probleme, war: Array-Funktionen vs. literale Angabe

Sebastian Mendel lists at sebastianmendel.de
Mit Feb 14 12:40:09 CET 2007


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