phpbar.de logo

Mailinglisten-Archive

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

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

Niels Runge info at runge.it
Die Feb 13 11:55:09 CET 2007


Hallo Thorsten,

Thorsten Koch wrote:
> Wie geht Ihr eigentlich damit um?
>
> 1. Wie findet Ihr die Bottle-Necks raus?
> 2. Wie optimiert Ihr Euer System?
>
>
> Meine Herangehensweise im aktuellen Projekt:
>
> 1.
> Ich habe eine Klasse etabliert, die direkt in der Anwendung integriert ist und die Anwendung in Zeitzonen einteilt, deren Durchlaufzeiten gemessen werden. Dabei kann es sich um durchlaufene Abschnitte handeln (also zuerst Entgegennahme des Aufrufes, Laden der Bibliotheken, Laden der Standardklassen, Ausführung des Userrequestes, Darstellung des Inhaltes, Herunterfahren der Anwendung etc.), sowie die Verweildauer innerhalb diverser Funktionen (wie lange ist die Anwendung in der Datenbank etc.).
> Somit können also die einzelnen Abschnitte und evtl. Auswirkung von Änderungen auf die Performance gemessen werden. Das ist aber alles mit der Hand am Arm und nicht sehr schick.
> Optimierung: Angemessener wäre natürlich der Einsatz eines Debuggers, wie xdebug. Da sind wir grad dran.
>   
je nach Anwendung sind es meistens (also bei mir meine ich jetzt ;-) ) 
aufwändige SQL-Abfragen die Zeit kosten. Also lasse ich bedarf alle SQL 
Abfragten mitloggen. Normalerweise die Abfrage selber sowie die 
benötigte Zeit oder wenn nötig auch das komplett Ergebnis.
Ansonsten für ein Überblick schafft auch die "Profile" Funktion einer IDE.

> 2.
> Sind die langsamen Teile der Anwendung nun identifiziert, kann im Ablauf-Logfile (viele Codezeilen innerhalb Funktionen, die den Start und das Ende markieren) nachgeschaut werden, was da eigentlich abläuft und man kann durch Refactoring etc evtl. langsame Teile optimieren. Wie genau optimiert wird, hängt natürlich sehr von dem Programmteil ab.
> Was sich als gute, einfache und effiziente Methode herauskristalisiert hat ist der Einsatz eines Caches. Hierzu verwende ich den eAccelerator. Das ist aber leider nur eine einmalige PerformanceKanone.
> Grundsätzliche Verfahren um Performance zu haben bzw keine langsamen Programmteile zu generieren habe ich leider nicht. Etwas was ich kürzlich gelesen habe, sollte man sich allerdings im Hinterkopf behalten:
> Wenn man viele einzelne Datenbankanfragen auf in eine packen kann, sollte man das tun. Wenn man mehrere User aus einer Tabelle auslesen möchte, dann sollte man diese nicht einzeln auslesen, sondern auf einmal mit where id=x OR id=y OR id=z und dann einfach drüber loopen.
>   
Cache -> ByteCodeCache (oder wie auch immer die Teil jetzt heißen) 
sollte man aufjedenfall verwenden denke ich, ich hatte bisher noch 
keinen Nachteil das irgendwas nicht lief.
Aber ich versuche auch soviel wie möglich selbst in der Anwendung zu 
cachen. Mysql-Query-Cache ist schön und gut, aber wesentlich mehr 
brachte mir bisher immer ein eigenes System. Entweder nach X Sekunden 
nicht mehr gültig oder bis die Daten aktualisiert werden usw.
Gespeichert wird entweder als Text, temporäre Tabelle (HEAP-Typ) oder 
meistens direkt als PHP-Quelltext so dass dieser direkt eingebunden 
werden kann, ala "include CACHE_DIR.'products/'.$t_product_id.'.php';" 
Das bringt sehr viel bei mir!

Und sonst, Hardware wird auch immer billiger hehe ;-)
Nee, ich versuche schon soviel wie möglich Software-technisch zu lösen. 
Oft kann man auch einiges rausholen wenn man den Indianer gegen Lighty 
(www.lighttpd.net) austauscht oder eben unnötige Module austauscht. Das 
bringt jetzt meistens nicht so viel in der einzelnen Ausführzeit der 
Skripte, aber es kann mitbestimmen wieviel Requests per Sekunde möglich 
sind.

Ok, das Performance-Thema könnte man sicherlich noch bis ins unendliche 
fortführen und jeder hat seine eigenen Erfahrungen da, aber ich hoffe es 
hilft Dir vielleicht etwas :-)
Grüße
Niels





php::bar PHP Wiki   -   Listenarchive