PHP Optimierungsfragen

aargau

Erfahrenes Mitglied
Da ich mir langsam aber sicher immer wie mehr gedanken über Optimierung von php code mache, die Seiten welche ich erstelle so schnell wie möglich machen möchte, hätte ich nun ein paar Fragen an euch.

- Ist es Sinnvoll in einer mysql Datenbank zwei spaten für texte anzulegen und in der einen die Daten roh (für spätere bearbeitung) und in die anderen umwandlungen von Links, zulange Wörter trennen etc. komplett schon einzutragen und es danach nicht mehr bei jedem Seitenaufruf machen zu müssen? Dies müsste doch eigentlich deutlich schneller sein als bei jedem Seitenaufruf eines Profiles die ganzen Strings durch preg_match(), htmlentities() usw zu schicken. Oder sehe ich dies falsch?

- Macht es einen unterschied ob ich eine globale funktion.php habe wo alle Funktionen der gesammten Seite drinn sind (heisst von Bildausgabe über Profilinfos usw) oder wäre es sinnvoller für z.B. Profil.php auch eine eigene funktion.php anzulegen und wirklich nur diese Funktionen in diese Datei zu speichern die auch auf der jeweiligen Seite gebraucht werden? Zugleich frage ich mich ob man diese Datei nicht komplett in den Speicher laden könnte um die ewigen Diskzugriffe zu vermeiden?

Für mich ist klar das auch cachning eine gute Lösung wäre um langsamen code, beiwelchem sich die Ausgabe nur selten verändert. Nur möchte ich hald auch den code ansich so optimal wie möglich Programmieren.

Gibt es ev. irgend wo eine Webseite wo es z.B. gute beispiele gibt wie man seinen code optimal verbessern könnte ?
 
Da ich mir langsam aber sicher immer wie mehr gedanken über Optimierung von php code mache, die Seiten welche ich erstelle so schnell wie möglich machen möchte, hätte ich nun ein paar Fragen an euch.

- Ist es Sinnvoll in einer mysql Datenbank zwei spaten für texte anzulegen und in der einen die Daten roh (für spätere bearbeitung) und in die anderen umwandlungen von Links, zulange Wörter trennen etc. komplett schon einzutragen und es danach nicht mehr bei jedem Seitenaufruf machen zu müssen? Dies müsste doch eigentlich deutlich schneller sein als bei jedem Seitenaufruf eines Profiles die ganzen Strings durch preg_match(), htmlentities() usw zu schicken. Oder sehe ich dies falsch?
Nein, das macht keinen Sinn, denn es würde nutzlosen Speicherplatz verbrauchen. Das mag sich gerade im Web komisch anhören, aber überleg wie viele Daten dieses Forum als Beispiel hätte, würde es alle Daten doppelt speichern müssen. Dafür gibt es Caching.

- Macht es einen unterschied ob ich eine globale funktion.php habe wo alle Funktionen der gesammten Seite drinn sind (heisst von Bildausgabe über Profilinfos usw) oder wäre es sinnvoller für z.B. Profil.php auch eine eigene funktion.php anzulegen und wirklich nur diese Funktionen in diese Datei zu speichern die auch auf der jeweiligen Seite gebraucht werden? Zugleich frage ich mich ob man diese Datei nicht komplett in den Speicher laden könnte um die ewigen Diskzugriffe zu vermeiden?
Meiner Meinung nach wäre es sinnvoller eine "global.php" zu erstellen, für Funktionen die wirklich jede Seite braucht und andere auf spezifische auszulagern, so wie du es geplant hast. Definiere mal komplett in den Speicher laden?

Für mich ist klar das auch cachning eine gute Lösung wäre um langsamen code, beiwelchem sich die Ausgabe nur selten verändert. Nur möchte ich hald auch den code ansich so optimal wie möglich Programmieren.
Für hoch belastete Seiten ist Caching ein Muss.

Gibt es ev. irgend wo eine Webseite wo es z.B. gute beispiele gibt wie man seinen code optimal verbessern könnte ?
Ehrlich gesagt, fallen mir keine ein.
 
Nein, das macht keinen Sinn, denn es würde nutzlosen Speicherplatz verbrauchen. Das mag sich gerade im Web komisch anhören, aber überleg wie viele Daten dieses Forum als Beispiel hätte, würde es alle Daten doppelt speichern müssen. Dafür gibt es Caching.
Aber Speicher ist doch eigentlich Deutlich günstiger als z.B. ein zweiter Server bzw. ein Server mit mehr Leistung. Caching speichert ja die Daten schlussentlich auch auf der Platte, wenn auch nur Temporär.

Definiere mal komplett in den Speicher laden?
Naja das die Datei einfach immer im Arbeitsspeicher ist und die Funktionen somit immer verfügbar sind. Habe mal in einem Techblog von einer sehr grossen Community gelesn das sie das so mit den Sprachen machen, damit dies nicht jedesmal neu eingelesen werden muss. Wie genau weis ich leider nicht.
 
Nein, das macht keinen Sinn, denn es würde nutzlosen Speicherplatz verbrauchen. Das mag sich gerade im Web komisch anhören, aber überleg wie viele Daten dieses Forum als Beispiel hätte, würde es alle Daten doppelt speichern müssen. Dafür gibt es Caching.

Da bin ich aber nicht deiner Meinung. Man auf den Speicherverbrauch pfeift, dann ist es aufjedenfall schneller. Es kommt natürlich auf die Texte an, bei Einzeilern würde das natürlich herzlich wenig bringen. Man könnte auch überlegen den Text verarbeitet zu speichern und eine decode-Funktion zu schreiben, die das ganze rückgängig macht, falls der Text "für spätere Bearbeitung" gebraucht wird und das nicht öfter, als der Formatierte.

Meiner Meinung nach wäre es sinnvoller eine "global.php" zu erstellen, für Funktionen die wirklich jede Seite braucht und andere auf spezifische auszulagern, so wie du es geplant hast. Definiere mal komplett in den Speicher laden?

Das Parsen der Funktionen ist aufjedenfall ein Klacks im Vergleich zu zB Mysql-Abfragen. Da würde ich auch nicht so viel drauf geben Funktionen in Scripte einzulagern. Wie schon gesagt: ich sehe das meiste Potential bei den Datenbankabfragen und -design.
 
Das "wrapen" eines langen Wortes geht in der Regel über den Parser wesentlich schneller als die Bedingung der SQL-Query auszuführen (inkl Ergebniss holen)...es ist sauberer und nicht so Sinnfrei.

Und JA.....Das Caching passiert im Ram, nicht auf Platte (Was wäre ein Caching, welches die Daten von Platte holt? Dann bräuchte ich kein Caching, weil ich eh auf Platte zugreifen muss und kann den Ram, welches das Caching-Prog braucht, Sinnvoller nutzen)

Siehe dazu auch mal:
- APC
- Memcache
- XCache
- eAccelerator
 
Vielen Dank

Ich werde mich in die von dir gelisteten Caching "themen" mal einlesen.

Nun hätte ich noch eine andere Frage, es ghet allerdings auch in den Rahmen der Optimierung. Ist es normal dass das Ausführen einer php Seite auf dem Server über 40% CPU last braucht oder hat es da irgend wo ein riesen Last-schlucher drinn?

Die Seite besteht aus 7-10 mysql Querys, welche in etwa so aussehen:
- Ist der User gesperrt worden
- Memberinfos (gesammte spalte von der benutzerdatebank des jeweiligen users)
- 2X neuste Fotos
- neue nachrichten, neue freundesanfragen
- Filemanger (auflistung von 10 Dateien)

Die Seite ist in max 0.1Sekunden abgearbeitet, meist sogar 0.05Sekunden.
Das ganze ist auf einem Testserver, welcher nur ein Intel Celeron 1.5Ghz CPU hat und 1GB DDR2 Ram, also auch nicht gerade das beste system.
Allerdings ist die Aktuelle seite welche (ich sag mal) Katastrophal Programmiert ist (keine Funktionen, alles direkt mit HTML etc) und braucht nur 7% Last, das ganze auf einem V-Server welcher einem 1Ghz P3 leistung entsprechen soll.

Vieleicht als hinweis, damit ich die CPU-Last erreicht habe, habe ich mehrfach F5 gefrückt, allderings denke ich das wenn das Projekt online ist die Zugriffe auch nicht unbedingt geringer sind...
 
Da ich nicht unbedingt möchte das dieser Code öffentlich ist, schreibe ich dir ein Link zu der funktion.php (als txt gespeichert), ich hoffe das ist okay.

Edit:
Sonstiger Code:
Session Sicherheit, Kontrolle ob user gesperrt wird etc. (dies wird bei jeder Datei eingebunden)
http://84.74.12.191/1.txt
 
Zuletzt bearbeitet:
Was ich nun gerade noch getestet habe und herausgefunden habe:

include ich die function.php nicht , heisst es wird bestimmt nichts geladen, gehe auf die home seite, welche aus reinem html besteht ausser eben die obige datei die ich angehängt habe, welche checkt ob der user eingeloggt ist etc. komme ich auch auf eine ganz schöne CPU last. Ich könnte mir vorstellend as es wirklich der extrem schlechte CPU ist. Zumal auch das aufrufen der Indexseite vom Server über das benchmark tool "ab" von apache (über einen externen server) gute 30-40% last erzeugt bei 1000requests in ca 30sekunden.

Aber wenn sich bofh1337 die function.php mal ansehen könnte wäre dies vieleicht trodem gut, damit du mir sagen kannst ob mein programmierstil so okay ist oder ob es katastrophal ist.
 
Ich empfehle dir, mal mit einem Debugger die Seite zu untersuchen. XDebug bietet sich dafür eigentlich an.

APC solltest du auf jedenfall installieren, denn da werden die geparsten PHP Files vom Interpreter Binär zwischengespeichert, was auf jeden Fall Last vom Server nehmen sollte.
 
Zurück