Thread Schleifengeschwindigkeit (20 answers)
Opened by RPerl at 2009-05-30 17:02

sid burn
 2009-05-30 20:37
#122111 #122111
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
2009-05-30T15:46:15 RPerl
Gibt es bei Perl eigentlich auch sowas aehnliches wie
www.phpbench.com ?

Die Seite www.phpbench.com halte ich teilweise für ziemlich nutzlos. Eine Programmierregel besagt das man nicht vorreilig Optimieren soll.

Zumal die Zeiten dort schon lächerlich sind. Bei einer Foreach schleife messen sie 620 mikrosekunden und für ihre lange version eine alte for schleife und vorher mit sizeof die elemente festlegen dauert 80 mikrosekunden.

Das hört sich erstmal viel an, aber beides ist immer noch unter einer Millisekunden und für einen Mensch nichtmal ansatzweise spürbar.

Wenn du 1000 leere foreach schleifen hintereinander machst dann hättest du mit der foreach version also insgesamt 620 millisekunden und bei der ausgedehnten version 81 millisekunden.

Das würde man zwar als Mensch merken (zumindest wenn das programm lediglich aus den beiden schleifen besteht und sonst nix weiter machen), allerdiengs wirst du nie hingehen und 1000 mal hintereinander arrays durchgehen und absolut nichts machen. Und das ist der knackpunkt. Das was du anstellst, und das sind ja meist irgendeine bearbeitung wird wohl den mammut anteil der Laufzeit ausmachen und nicht das durchlaufen der schleife.

Und wenn du bei jedem Schleifendurchlauf etwas machst und das bereits 10 millisekunden dauert, und jedes array 100 einträge hat. dann würde deine foreach version: 100,606 millisekunden brauchen und deine ausgedehnte for schleife 100,81 millisekunden. Die unterschiede sind also lächerlich gering.

Es mag dann zwar sein das eine foreach schleife auf dem papier 750% schneller ist als die lange version. Wenn das Programm aber nur 0.01% seiner CPU Zeit in einer schleife verbringt, hat es am ende keinerlei auswirkungen wenn du diesen Teil Optimierst.

Ansonsten schaut die Optimierung dann auch noch so aus das du fehleranfällig code schreibst. Ein Array durchzugehen und größe selber festlegen und die bedingung selber festlegen ist nunmal fehleranfällig und auch schlechter lesbar. Ansonsten muss du Grundsätzlich ja mehr schreiben für diese "extended" version. Die Vorteile die ein foreach also hat würde ich nicht aufgeben, zumal diese wohl sowieso nicht die performance lücke sein wird, sondern eher das was du in der schleife tust.

Daher halte ich diese Seite auch für PHP Entwickler für total sinnlos, und wenn man die Performance erhöhen möchte dann sollte man einen Profiler nutzen um die stellen zu suchen die am meisten Zeit beanspruchen und diese stellen Optimieren.

Und wenn man sie gefunden hat dann eben die stellen optimieren, ein besserer algorithmus, vielleicht ein caching? etc.

Alles andere ist Sinnlos.
Last edited: 2009-05-30 23:13:17 +0200 (CEST)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Schleifengeschwindigkeit