Moin!
Ich habe eine Webseite, die ihren Inhalt aus einer Datenbank bezieht (Bewertungen und Kommentare). Wenn jetzt die Webseite groesser wird (ich weiss, utopische Vorstellung), mehr Besucher bekommt und die Datenbank dementsprechend mehr Kommentare/Bewertungen enthaelt, habe ich die Befuerchtung, dass die Performance leidet, wegen den vielen Datenbank-Abfragen und dem Traffic.
Gegen den Traffic kannst du wenig tun - den erschlägt man in der Regel durch einen Webserver-Cluster mit Load-Balancing.
Die Menge an DB-Abfragen hingegen kann man bei Bedarf einer manuellen Optimierung unterziehen.
Jetzt meine Frage:
Was ist programmiertechnisch und performancetechnisch besser/schneller:
- Bei jedem Aufruf der Seite die Datenbank befragen und die Daten darstellen.
oder- Ein Skript schreiben, welches basierend auf der Datenbank eine HTML-Seite entwirft. Dann wird auf der Seite, die die Benutzer aufrufen, diese Seite includiert. Nur wenn der Nutzer ein Kommentar oder eine Bewertung macht, wird per Aufruf eine Datenbankverbindung hergestellt und die Datenbank aktualisiert, per Skript, dann wird wieder die neue HTML-Seite includiert.
Weder, noch. Bzw.: Sowohl als auch.
Von der Performance her ist die Auslieferung einer komplett statisch auf Festplatte liegenden Datei unschlagbar schnell. Aber diese Datei so zusammenzustellen, dass die Dynamic der Site realisiert wird ist programmtechnisch sehr aufwendig.
Deshalb gilt umgekehrt: Eine Site voll dynamisch auszugeben ist programmtechnisch sehr schnell realisiert - aber die Performance ist naturgemäß nicht ganz so schnell.
Der Mittelweg würde bedeuten: Wichtige, häufige und selten veränderte Aufrufe der dynamischen Site werden in einem Cache gehalten. Viele von denen sind standardmäßig im Spiel, wenn man sie intelligent einsetzt, beispielsweise der MySQL-Query-Cache. Andere Caches kann man natürlich manuell ins Spiel bringen - sofern das Abrufen des Caches nicht langsamer ist, als der Originalvorgang (messen!).
Wie kann man eigentlich ein Skript, welches in einer anderen Datei liegt aufrufen und ihm Parameter uebergeben? Per include, oder gibt es da noch andere Wege?
Das würde man vermutlich versuchen zu vermeiden.
- Sven Rautenberg