Smartor Photo Album mit Clowns Pack -> Tuning
Verfasst: 18.04.2006 21:02
Da ich einige Performanceprobleme in meinem Forum habe, bin ich nun dabei, die meistgenutzten Seiten zu verbessern. An 1. Stelle war da die album_thumbnail.php.
Diese Datei ist meiner Meinung nach unnötig. Denn sie generiert bei jedem einzelnen Vorschaubild eine Datenbankabfrage.
Bei den kleinen Vorschaubildern hielt ich das für quatsch, weshalb ich das mal eben verändert habe.
Ein Beispiel:
Das Vorschaubild wurde bisher mit dieser Adresse generiert:
www.maxrev.de/album_thumbnail.php?pic_id=1225
Wenn man nun eine Kategorie im Album aufgemacht hat, dann liest das Script aus der Datenbank die lustigen IDs der Bilder aus und generiert die Adresse für die Bilder.
Nun damit aber das Bild dargestellt werden kann liest jedes einzelne Bild nocheinmal in der Datenbank aus, welchen Bildernamen es hat. Das macht dann pro Albumseite mindestens 12 Datenbankabfragen (=12 Vorschaubilder).
Der zweite Nachteil ist, dass ein Browser die Bilder nicht zwischenspeichert. Und bei jedem Besuch die Bilder neu lädt. Also wenn jemand von einer Seite zur anderen wechselt verursacht das immer wieder aufs neue Last(!).
Nun habe ich das geändert. Beim 1. Abrufen wird auch der Dateiname ermittelt und ich lese nun den direkten Link zum Bild aus:
http://www.maxrev.de/album_mod/upload/c ... 015e7f.jpg
Vorteile:
- Bilder laden nicht immer wieder neu
- die Bilder können direkt verlinkt werden (auch in Beiträgen)
- die Datenbank wird enorm entlastet
Nachteile:
- die Bilder können direkt verlinkt werden (auch auf fremden Seiten = Traffic)
- es könnte sein, dass das Thumbnail nicht da ist, obwohl der Link ja in der Datenbank ist. Im Originalcode wurde in diesem Fall automatisch ein neues Vorschaubild generiert. Der Cache muss dann im ACP per Hand erneuert werden. (musste ich aber noch nie machen, ich wüsste auch nicht warum ein Bild auf einmal gelöscht sein sollte?!)
Die großen Bilder habe ich erstmal so gelassen, obwohl man dort das gleiche verwirklichen könnte.
Dazu öffnet man die album_hierarchy_sql.php und sucht nach diesem:
in der gleichen zeile direkt nach "p.pic_id," setzt man nun das ein:
Und das:
ersetzt man mit dem:
Das macht man nun für jeden Block einmal (also recent, highest rated & random). Insgesamt also 4 Mal.
Ihr glaubt nicht was das den Server beruhigt. Bei mir wurde im Monat März 2006 diese Datei 500.000 Mal aufgerufen. Damit spare ich also jetzt im Monat 500.000 Datenbankabfragen. Nicht schlecht oder
EDIT:
Wenn ich mir meine Statistik aus Februar ansehe und dabei sehe, dass album_pic auf Platz 2 steht, werde ich wohl auch da etwas dran ändern:
Das spart dann wieder ca. 250.000 Datenbankabfragen pro Monat. Der einzige Nachteil ist dann nur noch der Trafficdiebstahl. Dem kann man ja bekannterweise per .htacess Herr werden.
Kontrolliert Eure Statistik, ich könnte wetten, dass es bei Euch auch nicht anders aussieht.
Dafür muss man nur in der album_showpage.php nach dem suchen:
ersetzen gegen:
EDIT:
Auslastung vor dem Umbau:
[ externes Bild ]
Auslastung nach dem Umbau:
[ externes Bild ]
Diese Datei ist meiner Meinung nach unnötig. Denn sie generiert bei jedem einzelnen Vorschaubild eine Datenbankabfrage.
Bei den kleinen Vorschaubildern hielt ich das für quatsch, weshalb ich das mal eben verändert habe.
Ein Beispiel:
Das Vorschaubild wurde bisher mit dieser Adresse generiert:
www.maxrev.de/album_thumbnail.php?pic_id=1225
Wenn man nun eine Kategorie im Album aufgemacht hat, dann liest das Script aus der Datenbank die lustigen IDs der Bilder aus und generiert die Adresse für die Bilder.
Nun damit aber das Bild dargestellt werden kann liest jedes einzelne Bild nocheinmal in der Datenbank aus, welchen Bildernamen es hat. Das macht dann pro Albumseite mindestens 12 Datenbankabfragen (=12 Vorschaubilder).
Der zweite Nachteil ist, dass ein Browser die Bilder nicht zwischenspeichert. Und bei jedem Besuch die Bilder neu lädt. Also wenn jemand von einer Seite zur anderen wechselt verursacht das immer wieder aufs neue Last(!).
Nun habe ich das geändert. Beim 1. Abrufen wird auch der Dateiname ermittelt und ich lese nun den direkten Link zum Bild aus:
http://www.maxrev.de/album_mod/upload/c ... 015e7f.jpg
Vorteile:
- Bilder laden nicht immer wieder neu
- die Bilder können direkt verlinkt werden (auch in Beiträgen)
- die Datenbank wird enorm entlastet
Nachteile:
- die Bilder können direkt verlinkt werden (auch auf fremden Seiten = Traffic)
- es könnte sein, dass das Thumbnail nicht da ist, obwohl der Link ja in der Datenbank ist. Im Originalcode wurde in diesem Fall automatisch ein neues Vorschaubild generiert. Der Cache muss dann im ACP per Hand erneuert werden. (musste ich aber noch nie machen, ich wüsste auch nicht warum ein Bild auf einmal gelöscht sein sollte?!)
Die großen Bilder habe ich erstmal so gelassen, obwohl man dort das gleiche verwirklichen könnte.
Dazu öffnet man die album_hierarchy_sql.php und sucht nach diesem:
Code: Alles auswählen
SELECT ct.cat_user_id, ct.cat_id, ct.cat_title, p.pic_id,
Code: Alles auswählen
p.pic_thumbnail,
Code: Alles auswählen
'THUMBNAIL' => append_sid("album_thumbnail.$phpEx?pic_id=". $picrow[$j]['pic_id']),
Code: Alles auswählen
'THUMBNAIL' => ALBUM_CACHE_PATH . $picrow[$j]['pic_thumbnail'],
Ihr glaubt nicht was das den Server beruhigt. Bei mir wurde im Monat März 2006 diese Datei 500.000 Mal aufgerufen. Damit spare ich also jetzt im Monat 500.000 Datenbankabfragen. Nicht schlecht oder

EDIT:
Wenn ich mir meine Statistik aus Februar ansehe und dabei sehe, dass album_pic auf Platz 2 steht, werde ich wohl auch da etwas dran ändern:
Code: Alles auswählen
1 489936 3.90% 1200162 0.26% /album_thumbnail.php
2 239043 1.90% 8024105 1.72% /album_pic.php
Kontrolliert Eure Statistik, ich könnte wetten, dass es bei Euch auch nicht anders aussieht.
Dafür muss man nur in der album_showpage.php nach dem suchen:
Code: Alles auswählen
'U_PIC' => ( $picm ) ? append_sid("album_pic.$phpEx?pic_id=$pic_id") : append_sid("album_picm.$phpEx?pic_id=$pic_id"),
Code: Alles auswählen
'U_PIC' => ( $picm ) ? ALBUM_UPLOAD_PATH . $thispic['pic_filename'] : append_sid("album_picm.$phpEx?pic_id=$pic_id"),
Auslastung vor dem Umbau:
[ externes Bild ]
Auslastung nach dem Umbau:
[ externes Bild ]