phpbar.de logo

Mailinglisten-Archive

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

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

Yannik Hampe yannik at cipher-code.de
Die Feb 13 16:26:32 CET 2007



Thorsten Koch wrote:
> Hi Leute,
> 
>>> (6ms vs 13ms bei 10000x[] vs 10000x array_push auf meinem Athlon
>>> 64 3700+, 2GB DDR2 Win2k php 5.2).
> 
> Ein Unterschied von 7ms. Selbst bei 100k Datensätzen sinds 70ms,
> naja. Ich denke wenn man Performance-Probleme hat, dann hat man die
> sicherlich woanders und hat wirkungsvollere Stellschrauben.

Missachte sowas nicht so leichtfüssig. Sowas summiert sich schnell
genug. Und warum die langsame Variante nehmen?
> 
> 
> Wie geht Ihr eigentlich damit um?
> 
> 1. Wie findet Ihr die Bottle-Necks raus? 2. Wie optimiert Ihr Euer
> System?

Wenn man es richtig professionell machen will, gibt es für php xdebug.
Damit kann man Ausführungszeiten genauestens analysieren. Ich habe es
nie selbst verwendet, da meine Projekte dem Aufwand nicht
gerechtfertigten, aber das, was ich davon auf der letzten php Usergroup
in Bochum gesehen habe fand ich recht eindrucksvoll.

Momentan nehme ich daher php's microtime() funktion zu Hand. Dabei mache
 ich immer mal wieder, wenn ich mir überlege, wie ich ein Problem löse
ein kleines Benchmark zu gewissen code schnipseln...
Da kommen immer wieder interessante Sachen raus:

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...

Oder sowas:

$konsts =Array('meineKonstante' => 'bla');
$muell =$konsts['meineKonstante'];
vs.
define('meineKonstante','bla');
$muell =meineKonstante;
vs.
class meineKlasse
{
  const meineKonstante ='bla';
}
$muell =meineKlasse::meineKonstante;

(das $muell = -statement jewals 10000x)

Und Ergebnis? Will wer raten? ;-).
Nun... Auch wieder in der Reihenfolge, wie ich es geschrieben habe von
schnell nach langsam.
Wer hätte gedacht, dass ein assoziativer Array Konstanten in die Tasche
steckt?
Nun gut. Wir könnten es hier mit anderen php-Optimierungen zu tun haben,
wie Referenzen, die erst kopiert werden, wenn die Daten verändert werden
oder sowas. Dafür weiss ich leider nicht genug über die php-Engine :-(.

Aber es ist schonmal gut zu wissen, dass beiu der Frage Konstanten vs.
assoziative Arrays Performane eher eine Argument für die Arrays sind.
Ich hätte das Gegenteil erwartet...

Es macht jedenfalls viel Spass und man entdeckt immer wieder neues und
auch manchmal unerwartetes solche Tests zu machen.

Yannik

php::bar PHP Wiki   -   Listenarchive