Drupal Performance Tuning Guide

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

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)

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

Einordnung:

Kommentare

Bild des Benutzers Jan Kammerath

MySQL wird häufig unterschätzt

Ich habe mal einen Artikel geschrieben, da ich denke, dass viele PHP Entwickler die Energie von MySQL falsch einsetzen und das System unterschätzen. Ich habe gerade eine solche Erfahrung mit WordPress gemacht: http://www.kammerath.net/php-performance-tuning.html

Vg,

Jan

Bild des Benutzers Miles

Coole Tips. THX, das bringt

Coole Tips. THX, das bringt mich auf jedenfall weiter

lg Miles

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt. Wenn Sie ein zulässiges Avatar mit Ihrer E-Mail-Adresse verknüpft haben, wird dieses als Avatar verwendet.

Weitere Informationen über Formatierungsoptionen

Aktualisieren Geben Sie die Zeichen ein, die Sie im Bild sehen. Geben Sie die im Bild dargestellten Zeichen ein; wenn Sie diese nicht lesen können, senden Sie das Formular ohne Eingabe ab, um ein neues Bild zu generieren. Groß-/Kleinschreibung wird nicht beachtet.  Switch to audio verification.