Webseite wesentlich schneller machen - nicht nur Drupal
Dieser Artikel bezieht sich nicht nur darauf Drupal Webseiten schneller zu machen, sondern es sind sehr viele allgemeine Tipps vorhanden um auch normale Webseiten schneller zu machen. Würde mich freuen, wenn für den einen, oder anderen ein Tipp dabei ist, den er noch nicht kennt. Man muß nicht erwarten, das die Webseite nach dem man einen Punkt abgearbeitet hat massiv an Geschwindigkeit zunimmt, sondern erst wenn mehrere, oder alle Punkte abgearbeitet wurden.
Mehr Geschwindigkeit durch cleveres Webdesign
Hier kann man eine ganze Menge an Geschwindigkeit herausholen. Arbeiten mit CSS sollte selbstverständlich sein und darüber möchte ich mich auch nicht weiter auslassen. Wichtig ist, das man die Bilder auf ein Minimum herunter transformiert und eventuell auch CSS Sprites einsetzt(hier ist ein CSS Sprites Generator). CSS Sprites auf jeden Fall, wenn es sehr viele Icons/Bilderchen sind. Dadurch kann man unter Umständen eine Menge http Requests einsparen. Browser schaffen normal nur 2-4, danach werden die nächsten abgearbeitet. Bei Seiten wo also zum Beispiel 40 und mehr kleine Bilderchen und Icons geladen werden, lohnt es sich definitiv. Sind es aber nur 6-10 Bilderchen, dann kann man es meistens vergessen. Es gilt auch je kleiner die Bilder, desto besser. Hier können auch gute Komprimierprogramme Abhilfe schaffen. Für Bilder mit wenig Farben eignen sich Gifs und PNG, für Bilder mit vielen Farben sind JPG Bilder optimal. Gerade Mousover-Effekte kann man auch mit CSS wunderschön lösen(mache ich aber auch nicht immer) und muß nicht alles mit Buttons, oder Javascript lösen. Tabellen sind eigentlich auch nicht gerade das gelbe vom Ei und bei vielen Verschachtelungen bläht das den Quellcode auch ordentlich auf. Optimal ist es auf xhtml und CSS zu setzen. Bei der Verwendung von CSS wird das Stylesheet ausgelagert und es wird somit nur einmal geladen und nicht bei jeder neuen Seite nochmal. Schön ist es auch, wenn man das Javascript erst am Ende einer Seite lädt und nicht gleich am Anfang(mit CSS wird das leider nichts). Also in der Zeile vor dem schließen des Body Tags. Gerade wenn viel Javascript verwendet wird, kann man hier ordentlich Zeit sparen, da die Seite zwar noch lädt, aber schon viel früher der Bildaufbau beginnt. Bei Verwendung mehrerer CSS und Javascript Dateien empfiehlt es sich auch die Dateien jeweils als eine Datei zusammenzufassen und den Code zu komprimieren. Für CSS bringt Drupal hier schon was mit, aber es gibt auch noch das Modul CSS Gzip. Hier wird die CSS Datei gepackt ausgeliefert. Alle neuen Browser können damit umgehen. Für Javascript empfiehlt sich die Verwendung vom Javascript Aggregator. Man kann dies mit dem Modul mode deflate auch Serverseitig lösen. Dazu aber mehr unter: die Seite gepackt ausliefern.
Auch lohnt es sich bei vielen Bildern mit Subdomains zu arbeiten um die Anzahl der http Requests zu erhöhen. Browser erkennen eine Subdomain als eigenständige Domain und laden somit mehr Dateien mit einmal, also das doppelte an Dateien. Für Drupal kann man hierfür das Modul parallel nehmen. Ohne Drupal, einfach ein par Subdomains anlegen und dort die Bilder/Icons/Dateien der Webseite aufteilen. Um die Ecken rund zu bekommen, kann man auch CSS verwenden.
Tools zum Geschwindigkeitscheck:
Websiteoptimation - Hier werden auch sehr gute Tipps gegeben
Site-Perf.com und Pingdom Tools sind auch nicht schlecht!
Mehr Geschwindigkeit durch Caching
Hier wird es schwer und man kann keine generellen Tipps geben, da jede Seite unterschiedlich aufgebaut ist. Ist es eine Webseite, wo der Content nur ab und zu geändert und nur wenig auf die Datenbank zugegriffen wird, kann man hier teils enorme Geschwindigkeitssprünge erreichen. Hat man hauptsächlich festen Content und die Seite ist nicht dafür gemacht, das sich ein User anmeldet und im Backend surft, dann kann das Modul Boost wahre Wunder bewirken, allerdings habe ich die Erfahrung gemacht, das Boost die Seite in einer Community lahm legt.
Die Seite gepackt ausliefern mit Mod deflate:
Hier kommt der Server ins Spiel. Es bringt allerdings nichts, wenn die Datenbank lahmt und heftige Abfragen erfolgen, da der Server erst packt, wenn alle Abfragen durch sind. Installieren muß man sich hier das Modul mod deflate. Eine recht interessante Lösung findet man hier.
Bei Debian und Ubuntu aktiviert man Mod deflate einfach mit:
a2enmod deflate
Dann das in die httpd.conf:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript image/gif
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
DeflateCompressionLevel 2
SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</IfModule>Das DeflateCompressionLevel würde ich nicht höher wie 3, oder 4 einstellen, da der Server sonst zu viel rechnen muß. Aber das kommt halt auch auf die Auslastung des Servers an.
Dann die Konfiguration neuladen und fertig:
/etc/init.d/apache2 force-reload
Dateien Cachen mit Mod Expires:
Das ganze einfach wieder in der Shell aktivieren:
a2enmod expires
und dann in der expires.conf (bei mir unter /etc/apache2/mods-enabled/expires.conf) folgendes eintragen:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 4 houres "
ExpiresByType text/xml "access plus 4 houres"
ExpiresByType image/gif "access plus 2 weeks"
ExpiresByType image/jpg "access plus 2 weeks"
ExpiresByType image/png "access plus 2 weeks"
ExpiresByType video/quicktime "access plus 1 months"
ExpiresByType audio/mpeg "access plus 1 months"
ExpiresByType application/pdf "access plus 2 weeks"
ExpiresByType application/ps "access plus 2 weeks"
ExpiresByType application/xml "modification plus 2 weeks"
</IfModule>Danach die Konfiguration wieder neu einlesen mit:
/etc/init.d/apache2 force-reload
Verwendung von APC:
Mit APC(Alternative PHP Cache) habe ich sehr gute Erfahrungen gemacht und ordentliche Erfolge erziehlt. Es muß aber nicht auf jedem System den durchschlagenden Erfolg erziehlen, es kommt immer auf das System an. Für Drupal eignet sich hier der Cacherouter, welcher neben APC auch Memcache, e Accelerator und XCache unterstützt.
Installationsanleitung APC
Datenbank(MySQL) Tuning:
Hier einem Laien zu erklären was möglich ist und was man machen kann, ist ein Akt, aber es gibt da etwas, was halbwegs brauchbare Einstellungen ausspuckt(nicht immer, aber es geht halbwegs). Das ganze nennt sich Tuning Primer. Hier ist eine recht gute Installationsanleitung.
Es gibt natürlich noch mehr, was man machen kann, aber das sind meiner Meinung nach die wichtigsten Punkte gewesen.
HTH

Webseiten Geschwindigkeit optimieren