Dieser Artikel soll euch helfen, eure Drupal-Website so richtig in Schwung zu bringen.
Um den Artikel nicht zu lang und umfangreich werden zu lassen, werde ich mich kurz fassen, was einzelne Punkte angeht.
Wenn ihr genauere Fragen zum Inhalt habt, schreibt bitte einfach einen Kommentar.
PHP Performance Tuning (Drupal-Unabhängig)
Serverseitig
- OP-Code Cache aktivieren (APC, eAccelerator, Zend Server (CE, ...), Achtung: Zend Optimizer optimiert nur den Code, ist aber kein OP-Code Cache!). Wenn Ihr APC einsetzt, denkt daran die "shm_size" auf +/- 64M zu erhöhen.
- mod_expires einsetzen, um dem Browser Caching von Inhalten, sowie Bildern, css, js - Dateien und Co zu ermöglichen (wird von Drupal standardmäßig mit einer passenden Einstellung in der .htaccess angesprochen ohne Anpassungen vornehmen zu müssen).
- mod_gzip oder mod_deflate einsetzen, um die Übertragung vom Server zum Client zu komprimieren (Drupal ist für mod_gzip optimiert, mod_deflate gilt allerdings als performanter). Drupal cached standardmäßig nur die Seite aber keine CSS und JS-Dateien (http://drupal.org/node/101227).
- memory_limit auf mindestens 128MB erhöhen, dies beugt auch Fehlern vor.
- PHP und MySQL-Konfiguration optimieren (das Thema ist zu komplex und zu individuell um es hier im Detail zu beschreiben, wenn ihr euch damit nicht auskennt, behaltet besser die Standard-Konfiguration bei).
- Einige interessante Tipps gibt es außerdem hier: http://phplens.com/lens/php-book/optimizing-debugging-php.php (Aber Achtung, einige Punkte sind nur für Profis!! Auch hier gilt, nur das anpassen, was ihr versteht und wirklich in eurem Fall sinnvoll ist.)
- Eine Anpassung von realpath_cache_size und realpath_cache_ttl können helfen Drupal bei den zahlreichen Dateizugriffen zu beschleunigen, z.B.
realpath_cache_size = 1M realpath_cache_ttl = 300
Anwendungsseitig
- Anwendungsseitig gebe ich hier zunächst keine Tipps, da wir ja Drupal voraussetzen und die Modulentwickler sich bezüglich ihrer Anliegen am besten passend informieren. Einige Tipps gibt es auch noch in anderen Artikeln in meinem Blog.
- Wer sich trotzdem für das Thema interessiert, der findet hier einige interessante Inhalte (aber Achtung, einiges davon fällt auch unter meine Kritik am Ende dieses Artikels):
Website Performance Tuning (Drupal-Unabhängig)
- Unnütze Inhalte auf der Website vermeiden (Schmeißt eure Besucher nicht mit Content zu, den sie ohnehin nicht lesen. Jeder Inhalt der übertragen werden muss, kostet Ladezeit!)
- Grafiken komprimieren und nicht mit voller Qualität ausliefern (Guter Wert liegt meist zwischen 80 und 90%), auch das Bildformat (jpg, png, gif) kann hier Vor- und Nachteile in der Dateigröße bringen.
- JavaScript und CSS zusammenführen und in einer großen Datei ausliefern. Hier bewährt sich beispielsweise "minify".
- JavaScript bei Bedarf zusätzlich minimieren. Dafür gibt es zahlreiche Generatoren und für Drupal das Modul: http://drupal.org/project/javascript_aggregator (dem ich allerdings aufgrund der nötigen Anpassung von Template-Dateien kritisch gegenüberstehe und daher die hier empfohlene Variante vorschlage. Noch besser wäre, wenn keine manuelle Modifikation nötig wäre). Ich persönlich verzichte daher auf das Modul.
- Verwendet sauberen, (X)HTML-Konformen Quellcode, damit der Browser diesen nicht aufwändig im Quirks-Mode reparieren und "erraten" muss.
- Entfernt nicht benötigtes CSS und JavaScript. Häufig befinden sich nicht mehr benötigte Schnipsel in euren Dateien.
Drupal Performance Tuning (Rein Drupal-Bezogen)
- Seiteninhalte cachen (Noch besser als der Drupal-Interne Cache ist hier http://drupal.org/project/boost mit sehr vielen Konfigurationsmöglichkeiten. Auf Aggressives Caching verzichte ich ganz, minimale Cache-Dauer ist bei häufig ändernden Inhalten auch negativ zu betrachten). Eine nette Anleitung zu Drupal & Website Caching Mechanismen findet ihr hier: http://friendlymachine.net/posts/web-performance-guide-building-fast-dr…
- Komprimierung aktiveren ("Einstellungen >> Leistung"), was allerdings nur Auswirkungen hat, wenn mod_gzip auf dem Server installiert ist. Für mod_deflate müsst ihr den folgenden Code-Schnippsel in eure .htacces-Datei setzen:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
- Zusammenfassen von CSS und JS aktiveren (unter "Einstellungen >> Leistung"), ist diese Option deaktiviert, kann es bei der Einbindung vieler JS und CSS-Dateien auch zu Darstellungsfehlern im Internet Explorer kommen, da dieser nur eine begrenzte Anzahl verarbeitet! Daher sollte diese Option immer aktiviert sein, wenn ihr nicht gerade in den Stylesheets oder JavaScript arbeitet.
- Einen interessanten Ausblick gibt noch das Modul http://drupal.org/project/parallel welches ein Content Delivery Network aufbaut, indem es die Daten von mehreren URLs parallel lädt. Der Ansatz ist sehr interessant und sinnvoll, allerdings möchte ich es nicht empfehlen, bevor ich es selbst getestet habe. Sicherlich auch nur für WIRKLICH große Websites sinnvoll. Ansonsten eher schießen mit Kanonen auf Spatzen ;)
- Für sehr erfahrene Entwickler und Administratoren ist das Modul Memcache http://drupal.org/project/memcache interessant, welches dafür sorgt, dass Drupal Daten in den Zwischenspeicher geladen werden und somit schneller zugreifbar sind. Achtung, nichts für Anfänger und nicht in jedem Fall sinnvoll!)
- Wenn ihr sehr viele registrierte Benutzer habt und das Drupal-Caching somit für diese nicht greifen kann, hilft euch vielleicht das Modul http://drupal.org/project/authcache - allerdings habe ich dies selbst auch noch nicht getestet, bitte also um Vorsicht und Feedback.
- Der Views Ausgabe-Cache ist äußerst hilfreich, siehe http://chapterthree.com/blog/four-easy-fix-mistakes-will-kill-site-perf… (2)
- Das block_cache_alter.module reaktiviert den Block-Cache der auf kaum einer Standard Drupal Seite wirklich aktivierbar ist: http://chapterthree.com/blog/four-easy-fix-mistakes-will-kill-site-perf… (3)
- Sollte euch das noch nicht reichen, findet ihr weitere Drupal-Bezogene Tipps findet ihr außerdem hier (beachtet aber meine Hinweise unterhalb):
- http://colans.net/blog/drupal-7-performance-optimization-options-and-ch…
- http://wimleers.com/article/improving-drupals-page-loading-performance
- http://www.reizkraft.com/content/webseite-wesentlich-schneller-machen-n…
- http://drupal.org/node/326504
- http://2bits.com/articles/drupal-performance-tuning-and-optimization-fo…
- http://drupal.org/node/97347
- http://blog.windfluechter.net/index.php?/archives/320-Performance-Tweak…
- https://docs.google.com/presentation/d/1AgnurTWsWdMAFjfFmSU7mk2zfJu8jG_…
Weitere Hinweise:
Ich persönlich rate von Optimierungen ab, die von anderen Seiten empfohlen werden, meiner Meinung nach aber für nicht gerade extrem hoch belastete Websites (seid ehrlich zu euch selbst!) ein Tropfen auf dem heißen Stein sind und nur zu mehr Wartungsaufwand und Arbeit führen (wenn sie nicht 100%ig automatisiert sind), beispielsweise:
Zu unterscheiden ist also immer zwischen Optimierungen, bei denen man Vor-und Nachteile abwägen muss und Optimierungen, die außer einer kleinen Ersteinrichtung keine weiteren Nachteile oder weitere Arbeit bedeuten.
Und zum Schluss:
Die Optimierung ist auch immer von Einzelfällen abhängig. Daher ist es manchmal nicht sinnvoll, alle Optimierungen vorzunehmen, die theoretisch möglich wären.
Wird die Optimierung mit viel Wartungsaufwand erkauft, lasst die Finger davon.
Tools wie Firebug, YSlow und Live HTTP Headers unterstützen euch bei der Optimierung und helfen, Ergebnisse zu prüfen.
Mit LORI könnt ihr die Ladezeit in eurem Browser clientseitig messen.
Sehr cool ist auch die Möglichkeit von Loadtests, wie sie z.B. via Blazemeter umzusetzen sind: https://www.drupal.org/project/blazemeter
Ergänzungen sind willkommen :)
Weitere Tipps und Links für High-Traffic Drupal Websites findet ihr hier: http://julian.pustkuchen.com/drupal-7-high-traffic-websites-guide