Hi,
Mit Präventivem Laden sollte man möglichst wenig laden, um Speicher zu sparen, d.h. wenn dann Plugin-configs nur auf Anfrage…
Bei Performance geht’s im Grunde wirklich nicht um Scriptlaufzeit, sondern auch um Skalierbarkeit…
Beispiel: ich Lade mit PHP eine Datei, die dann an den Browser geschickt wird. Es gibt zwei Möglichkeiten:
a) das 1. Script lädt die volle Datei und sendet sie: ausführungszeit bei 1 Aufruf: 0,4 sec Speicherverbrauch: 10mb
b) das andere Script lädt Zeile für Zeile. Ausführungszeit bei 1 Aufruf: 0,6sec, Speicherverbrauch: 5mb
Nehmen wir an wir haben einen Rechner mit 100mb RAM
Bei 10 Aufrufen wird das 1. Script gleich schnell bleiben, beim 11. Läuft der RAM über und das System muss auslagern, Folge: das 1. Ist deutlich langsamer als das 2. -> das 2. Ist von der Skalierbarkeit besser
Zu PHP-Performance:
I/O ist normal schneller, doch fang nicht an kleine Datenmengen zu cachen, sondern optimier lieber die DB mit indezes
Ein Faktor, der die Ausführungszeit massiv nach unten drückt sind I/O-Zugriffe, also möglichst gering halten
Dann wichtig!: Dateien nicht alle preloaden, sondern per __autoload laden, wenn gebraucht
Das erfordert natürlich eine Objektorientierte Struktur der Anwendung
Was du nicht machen solltest, ist dich mit kleinscheiss wie ’ schneller als " rumzuschlagen, des gibt’s seit PHP 4.2 oder so nicht mehr und ist auch zu gering um es zu spüren
Cachen: caches sind nützlich, aber nur wenn man weiß, wo es sich lohnt zu cachen, z.B. Bei langen Scriptteilen mit vielen Prozeduren wie ein templateparser, aber nicht bei einer foreach-Schleife mit 10 Durchläufen, da ist das Filesystem zu langsam
Um mal rauszufinden, was richtig Zeit braucht kannst du dein Skript ja Profilen, dazu nutze ich z.B für Goma meine eigene Profile-Klasse, wo ich mit Profiler::Mark(“Name”); einen Anfang markiere und mit Profiler::unMark(“Name”); das Ende und dann die Differenz anzeige als Log am Ende
So habe ich z.B. Herausgefunden, dass das Aufbauen der Verbindung zur DB gut 10-30ms dauern kann und das inkludieren einer Datei auch mal 3ms in Anspruch nehmen kann, aber eine Schleife mit 10 durchläufen und 2x preg_Match je durchlauf braucht nur 0,09ms
So kannst du auch zusehen, wo der Speicherbedarf rapide ansteigt, z.B. Beim laden eines großen serialisierten Arrays aus einer Datei
Am Ende kannst du dann dadurch nachvollziehen, wo es sich lohnt zu optimieren