Geschrieben von Jan am Donnerstag, 18. September 2008 in Anleitungen, Joomla optimieren
Die besten Tipps und Tricks entstehen eigentlich immer aus eigenen Erfahrungen. Alle Theorie ist so lange grau bis man sich nicht selbst um die Lösung für ein Problem bemühen musste. So auch heute bei uns. Konkret störten mich schon seit Wochen die immer wieder unregelmäßig auftretenden langen Ladezeiten. Auch bei näherer Betrachtung ohne speziellen Auslöser oder erkennbares Schema. Also begibt man sich in die Tiefen seiner Joomla-Installation um den Fehler ausfindig zu machen, und findet dort zum Teil große Überraschungen. Da solche Probleme bei allen Projekten auftreten können wollen wir euch an diesem konkreten Beispiel zeigen wie man mögliche Engpässe ausfindig macht und beseitigt. Wer zum Beispiel ein SMF "Who's online" sein Eigen nennt, und bis zum Ende liest, wird es sicherlich entfernen oder gegen eine Alternative austauschen. Allein mit den hier genannten kleinen Eingriffen konnten wir die Abfragen an die Datenbank von 247 auf 47 senken und damit für Ladezeiten von bis zu unter einer Sekunde sorgen. Sicherlich nicht nur meiner Meinung nach ein gutes Argument sein Joomla etwas genauer unter de Lupe zu nehmen.
Bevor man beginnt sollte man sich klar machen welche Faktoren überhaupt eine Auswirkung auf die Ladezeit haben können.
- Server und Auslastung
Jede Webseite kann nur maximal so schnell laufen wie es die darunter liegende System ermöglicht. Teilt man sich zum Beispiel einen vollkommen überlasteten Server mit einigen tausend Kunden könnte man so viel optimieren wie man wollte, es würde leider kaum etwas bringen. Erste Anzeichen dafür erkennt man meist schon wenn ein frisch installiertes Joomla mit Beispielinhalten lahmt. In solchen Fälln lohnt es das kleine Administrator-Modul "Load Values" zu installieren das die Last auf Linuxservern im Backend anzeigen kann. Sind dort sehr hohe Werte zu erkennen, und wird das eigene Joomla auch nach allen Optimierungsversuchenn nicht wirklich schneller, sollte man sich bei seinem Anbieter darum bemühen auf einen anderen Server gelegt zu werden.
- Joomla Konfiguration und freundliche Adressen
Fern ab aller technischen Probleme kann man sein Joomla auch selbst soweit (ver)konfigurieren das es fast zum Stillstand kommt. Dazu zählt unter anderem auch die Generierung freundlicher Adressen für Suchmaschinen die immer wieder zu Performance-Problemen führt. Deshalb sollte man ruhig den Test machen und SEF, beziehungsweise SEF-Komponenten kurzfristig deaktivieren und schauen wie sich dies auf die Ladezeit des eigenen Projekts auswirkt. Das sehr beliebte OpenSEF zum Beispiel ist bekannt dafür das auf gut besuchten Webseiten schnell zur Bremse werden kann. Das liegt einfach daran das es noch keinen Cache besitzt und wirklich jeden Seitenaufruf neu generieren muss. Alternativen wie sh404SEF arbeiten dort bedeutend effektiver und belasten den Server und das Joomla kaum. Auch führen nicht kompatible "sef_ext.php" schnell zu Problemen die man auf den ersten Blick nicht erkennt weil sie zwar funktionieren, im Hintergrund allerdings zig Fehlermeldungen auswerfen und mehrfach durchlaufen.
- Interaktive und eingebundene Fremd-Inhalte
Jedes Seite ist nur so schnell wie das langsamste Glied in ihrer Kette. Ebenfalls oft vergessen werden die Auswirkungen die Fremd-Inhalte auf den eigenen Seitenaufbau haben können. Dabei grob unterscheiden kann man zwischen sichtbaren externen, und unsichtbaren internen Inhalten. Sichtbar wäre zum Beispiel ein in ein Modul eingefügtes Bild, Werbebanner oder Code das von einer fremden Seite stammt. Verzögert sich dort die Auslieferung wird auch unser Joomla nur bis zu dieser Stelle laden und dann warten. Je nachdem wo diese Inhalte im Quelltext vorkommen kann man Glück haben und die eigene Seite ist bereits fast vollständig geladen bis es zum Engpass kommt (zum Beispiel bei einem Modul im Footer). Hat man dagegen Pech kann es durchaus passieren das der gesamte Seitenaufbau stockt weil der entsprechende Aufruf bereits sehr früh vorgenommen wird. Einzig iFrames beanspruchen erst den Platz und lassen die Seite selbst dann weiter ungestört laden. Aber auch intern gibt es nicht sichtbare Faktoren die zu längeren Ladezeiten führen können. Um auch dafür ein Beispiel zu finden könnte man einfach die Schnittstelle von sh404SEF zu Projekt HoneyPot nennen. So wird jede anfragen IP-Adresse an das Projekt geschickt und dort mit einer Liste von bekannten Spammern verglichen. Sollte es dabei zu Verzögerungen kommen würde sich das auch direkt auf die eigenen Ladezeiten auswirken. Man möge mich bitte nicht falsch verstehen denn Projekt HoneyPot arbeitet wirklich schnell, nur wenn es einmal Probleme geben sollte würde sich dies auch auf die eigene Seite auswirken.
- Komponenten, Module, Mambots und Datenbankabfragen
Den größten Teil der anfallenden Last entstehen wohl durch die installierten Erweiterungen und deren Abfragen an die Datenbank. Was sich dort im Hintergrund abspielt kann man sehr leicht mit dem oft zu Unrecht verschmähten Debug-Modus herausfinden der sich über die "Global Configuration" aktivieren lässt. Ist er eingeschaltet gibt Joomla ganz unten auf jeder Seite eine Liste mit den Abfragen aus die an die Datenbank gestellt wurden und nummeriert sie auch gleich durch. Werte um die 100 sind dabei normal für ein Joomla und geben noch keinen Anlass zur Sorge. Letztlich spielt es aber eine große Rolle welche Komponenten auf der jeweiligen Installation laufen. Aber auch Module können einen großen Einfluss nehmen wie zum Beispiel das bereits oben genannte "Who's online" für das SMF beweist. Das sorgte zum Beispiel auf unserer Joomla Downloads hier für 80 zusätzliche Datenbankabfragen, bei jedem einzelnen Seitenaufruf. Das ist in etwa so viel wie ein normales Joomla für sich selbst benötigt. Ein Punkt den man ohne aktivierten Debug-Modus nie herausfinden oder verdächtigen würde.
- Bilder, Dateigrößen und Übertragungsvolumen
Vollkommen unabhängig von Joomla sollte man auf jeder Webseite die Größe seiner Bilder und Dateien im Auge behalten. So treibt jedes zusätzlich übertragene Byte nicht nur das Transfervolumen in die Höhe sondern kostet auch wertvolle Ladezeit. Bilder die man zum Beispiel nur in ihren Dimensionen verkleinert behalten ihre Dateigröße. Ein oft gesehener Anfängerfehler der ein Foto in Briefmarkengröße schnell über mehrere Megabyte groß werden lässt ohne das sich der Nutzer darüber im Klaren ist. Auch ist es eine Unsitte im Hintergrund Musik oder Videos zu laden. Bilder bitte immer mit der Bildbearbeitungssoftware seiner Wahl verkleinern und dann neu komprimieren, Dateien nur laden wenn dies auch von Besucher ausdrücklich gewünscht ist und auf jeden unnötigen Spielkram verzichten. Einen genauen Richtwert im Zeitalter von DSL zu geben fällt allerdings nicht leicht. Sehr viele Benutzer haben noch ISDN oder einen Vertrag der auf mit einem Transfervolumen verknüpft ist. Meine rein persönliche Empfehlung liegt bei etwa 150 kb die man nach Möglichkeit nicht überschreiten sollte. Die hängt aber immer vom Thema und Einsatzzweck einer Webseite ab.
- Cache aktivieren und richtig nutzen
Ein letztes großes Potenzial die Geschwindigkeit seiner Seite zu steigern liegt darin den Joomla Cache zu aktivieren. Das dieser ebenfalls kaum Benutzung findet dürfte an Problemen in der Vergangenheit liegen. Dort gab es immer wieder Schwierigkeiten mit manchen Erweiterungen wie zum Beispiel Kommentar-Komponenten die keine Einträge mehr vornehmen konnten. Heute sollte aber jede halbwegs moderne Erweiterung keine Probleme mehr machen und bei Interesse kann man schnell selbst testen ob mit dem Cache noch alles funktioniert wie es soll. Das kosten nur ein klein wenig Zeit, bietet dafür aber die Chance sein Joomla enorm zu beschleunigen. Auch gibt es bei vielen Modulen eine Option sich gleich mit in den Zwischenspeicher laden zu lassen. So lange es sich nicht gerade um zwingend aktuelle Ereignisse wie ein "Neue Postings" handelt sollte man auch ruhig Gebrauch von diesem Angebot machen. Nicht weiter berücksichtigen möchte ich an dieser Stelle die vielen externen Komponenten mit denen man einen zusätzlichen Cache schalten kann. Da sie umfangreicher in der Konfiguration sind, und oft auch anbieten Erweiterungen zu cachen die nicht dafür bestimmt sind, führen sie eher zu Problemen als das sie sie lösen. Wer trotzdem experimentieren möchte findet ein umfangreiches Angebot bei Extensions von Joomla.org.
Um ein konkretes Beispiel zu geben konnten wir allein mit dem Austausch des SMF "Who's online" und dem aktivieren des Caches die Datenbankabfragen von 247 auf 47 senken. Die Ladezeit hat sich dadurch von teilweise 7 bis 8 Sekunden auf bis zu unter einer Sekunde verbessert. Wie hoch genau hängt natürlich immer davon ab wo man sich befindet und ob die Seite schon im Cache vorhanden ist. Bereich wie das Forum konnten zum Beispiel auf etwa 2 Sekunden Ladezeit verbessert werden. Das es trotzdem noch weiteres Potenzial gibt beweist die Tatsache das wir das Gzip noch nicht aktiviert haben weil es damit Probleme im Zusammenhang mit sh404SEF bei uns gibt. Außerdem könnte man noch die CSS und die Javascript-Dateien komprimieren und damit kleiner machen, aber das würde für einen eigenen Artikel reichen. Außerdem weisen wir in diesem Zusammenhang nochmals auf einen Tipp mit dem Laden des Editors hin. Wir wünschen viel Spaß beim optimieren eurer Projekte. |