Das Örtchen RSS-Feed
Suchen
Blog
Ähnliche Beiträge
Neueste Kommentare
Neueste Einträge
Populäre Einträge
Tagwolke
addon auswertung barcamp blog bug cms cms made simple datenkrake drupal feed film firefox frickeln friday gewinnspiel hardware how-to individualisierung meinung mmo modul nas php problem rss se7en server sicherheit sicherung software spiel teil theme trailer unterhaltung update windows windows 7 wordpress wow
Monatsarchiv

Drupal: Sinnvolle Optimierungen (Teil 1)

Im Mai dieses Jahres hatte ich ja schon über die erste Ausgabe 5-6/2010 des neuen Magazins Website Boosting berichtet. Enthalten ist unter anderem auch der sehr gut geschriebene Artikel "Schneller Server - gutes Ranking?", den ich Ende letzter Woche endlich durcharbeiten konnte. Als erste Maßnahme habe ich daraufhin die Firefox Addons Yahoo! YSlow und Google Page Speed auf diesen Drupal-basierten Blog angesetzt.

Die Probleme

Beide Tools haben etliches bemängelt, wobei aber nicht alles wirklich lösbar ist. Beispielsweise ist eine Reduktion der DNS-Abfragen nur möglich, wenn ich mich von einigen der derzeitigen Blog-Verzeichnisse trenne. Dies möchte ich jedoch frühestens Ende des Jahres machen, wenn ich vernünftige Zahlen über die vermittelten Besucher habe. Die anderen Probleme bin ich dann jedoch anhand des englischen Artikels Improving Drupal's page loading performance durchgegangen.

Requests

Akut war aus meiner Sicht vor allem die Reduktion der Requests. Diese kann man nur auf eine Art erreichen, nämlich durch Zusammenfassung von Dateien. Wie man sehr schön in dem verlinkten Artikel sehen kann, bietet Drupal dies schon im Core für CSS- und JavaScript-Dateien an und zwar unter Einstellungen -> Leistung -> Absatz Bandbreiten-Optimierungen. Dort kann man das Zusammenfassen getrennt für CSS und JavaScript aktivieren.

Leider bringt das Aktivieren der JavaScript-Optimierungen ein gravierendes Problem mit sich, da danach im Admin-Bereich der WYSIWYG-Editor (hier TinyMCE) und das Ein-/Ausklappen der Fieldsets nicht mehr klappte. Also machte ich mich mittels Big G auf die Suche und fand den englischen Artikel Disable Javascript Aggregation on specific pages, welcher zur Lösung ein kleines Modul vorschlägt. Dieses ist aus meiner Sicht jedoch nicht optimal, da es die JavaScript-Optimierung nur für den Admin-Bereich deaktiviert.

Ich habe deswegen ein wenig über das Problem nachgedacht und mich für folgenden Lösungsansatz entschieden:

  • Anonyme Besucher bekommen Optimierungen wie unter Leistung festgelegt
  • Eingeloggte Benutzer bekommen keine CSS-/JavaScript-Optimierungen
  • Genutzt wird hook_init
  • Geändert werden beide Config-Einstellungen sofern kein Wartungsmodus aktiv ist
  • Ausnahme ist die Admin-Seite Leistung

Herausgekommen ist hierbei nachfolgender Code:

function my_module_init() {
    // No changes for the performance settings page
    if (!preg_match('/admin\/settings\/performance$/', $_GET['q'])) {
        global $user;
        global $conf;
       
        // Disables aggregation for logged in users if site is not offline
        if (
            is_object($user) &&
            ($user->uid != 0) &&
            ($conf['site_offline'] == 0)
        ) {
            $conf['preprocess_css'] = false;
            $conf['preprocess_js'] = false;
        }
    }
}

Achtung: Der fettmarkierte Modulname ist natürlich abhängig davon, wie ihr den Modul-Ordner und somit auch das Modul benannt habt.

Ich bin mir klar, daß nicht jeder etwas mit obigem Codebrocken anfangen kann und biete deswegen das fertige Modul als Beta-Version auf meiner geschäftlichen Website zum Download an.

Neben der Optimierung von CSS- und JavaScript-Dateien bleibt im Normalfall noch das Zusammenfassen von Grafiken mittels sogenannter CSS-Sprites, welches vom Drupal-Core jedoch nicht angeboten wird. Hierfür müsste man externe Produkte oder Dienste (beispielsweise SpriteMe) nutzen. Ich kann hierzu jedoch nichts genaueres sagen, da Sprites in diesem Blog nur bei dem RSS-Symbol Sinn machen und ich sie dort schon lange einsetze.

GZIP

Theoretisch sollte Drupal über die Aktivierung der Seitenkompression alle HTML-Seiten in komprimierter Fassung ausliefern. Dies war bei mir jedoch nicht der Fall, weswegen ich die Option wieder auf Deaktiviert zurückgestellt habe.

Um die Kompression aller Seiten trotzdem zu erreichen, habe ich mich zu einer On-The-Fly-Variante (via Dave Rupert) entschieden. Hierbei wird dann allerdings bei jedem Seitenaufruf die Seite erneut komprimiert, was die Belastung des Servers erhöht. Aktivieren kann man diese Variante indem man nachfolgenden Code am Ende der .htaccess-Datei (im Hauptordner der Drupal-Installation) ergänzt.

# Enable GZIP
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/text text/html text/plain DeflateCompressionLevel 9
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

Mit der gleichen Variante wäre auch eine Komprimierung der CSS- und JavaScript-Dateien möglich, wofür ich mich allerdings nicht entschieden habe. Stattdessen verwende ich die Module CSS Gzip und Javascript Aggregator. Beide Module fügen der Admin-Seite Leistung neue Optionen für die Komprimierung hinzu.

Fazit

In beiden Bereichen kann man mit geringem Aufwand Verbesserungen erzielen. Ich kapiere nur nicht, wieso es im Rahmen der JavaScript-Optimierungen unter Nutzung einer Core-Option überhaupt zu Problemen kommen kann.

Alternativ zu der vorgestellten GZIP-Lösung ist nach dem, was ich gelesen habe, auch ein Einsatz des Moduls Boost möglich (via Rapsli). Hiermit werde ich mich allerdings erst im Rahmen eines späteren Artikels beschäftigen.

Hallo! Bist du neu hier? Dann abonniere doch den RSS-Feed dieses nicht mehr ganz so stillen Örtchens, um über meine geistigen Ergüsse auf dem Laufenden zu bleiben. Alternativ besteht auch die Möglichkeit, sich von FeedBurner per E-Mail über meine Ausscheidungen benachrichtigen zu lassen.

Kommentar hinzufügen

(If you're a human, don't change the following field)
Your first name.
Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als nofollow markiert.
Hinweis

Kommentare beleben den Blog! Ich freue mich über jeden Kommentar. Du kannst hier offen Deine Meinung zum Artikel sagen, aber bitte beachte die Netiquette und vermeide es andere zu beleidigen.

Bitte unterlasst es die Kommentare zu SEO-Zwecken zu missbrauchen. Kommentare mit Links, die nicht zu Blogs führen (oder zu Blogs mit Grauzonen-Themen) und/oder Keywords als Namen verwenden und/oder Links im Kommentarbereich enthalten, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne Link-Tag und ohne http(s):// in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.

Die ersten vier Kommentare (mit den gleichen Daten bei Name, E-Mail und Blog) landen vor der Veröffentlichung in meiner Freigabe-Warteschlange und ich behalte mir das Recht vor, Kommentare entsprechend dieser Regeln anzupassen oder zu löschen!

t3n Magazin - Jetzt im Abo bestellen