Das Örtchen RSS-Feed
Kategorie
Kategorie: Blog
Buttons & Statistiken

Drupal: Sinnvolle Optimierungen (Teil 3)

Ich habe mich im Rahmen dieser Drupal-Serie schon mit der Reduzierung von Requests und der Nutzung von GZIP, sowie mit Cache-Headern über mod_headers.c beschäftigt. Doch auch nach diesen Änderungen, meckerten YSlow und Page Speed immer noch bei ein paar Punkten.

Die Probleme

Schon die ganze Zeit über ärgerte mich das hässliche "F" bei dem Punkt ETags in YSlow, obwohl dies eigentlich ein Problem ist, welches nur bei Serverfarmen existiert. Benutzt man lediglich einen Webserver, so könnte man die Meldung einfach ignorieren oder die Bewertungsregeln anpassen (was ich jedoch nicht wirklich wollte). Desweiteren störten mich die Hinweise zur Nutzung einer Cookieless Domain bzw. die Empfehlung ein Content Delivery Network (CDN) einzusetzen.

ETags

Ich wollte die ETags jedoch wie von YSlow empfohlen loswerden und fand zufälligerweise die passende Info in einem Blog-Artikel von Tanja.

  # Turn ETags Off
<IfModule mod_headers.c>
   Header unset ETag
</IfModule>
FileETag None  

Hinweis: Den obigen Code-Block habe ich einfach am Ende meiner .htaccess-Datei (im Hauptordner von Drupal) ergänzt und zwar unterhalb der Caching-Vorgaben aus Teil 2.

Cookieless Domain

Schon vor einiger Zeit hatte ich bei Frank Bültge einen Artikel gelesen, wie man für WordPress einen eigenen CDN einbinden kann. Deswegen begab ich mich auf die Suche nach einer ähnlichen Lösung für Drupal und wurde bei zwei Modulen (CDN und Parallel) fündig. Obwohl das letztere Modul eigentlich ein anderes Problem lösen soll, erschien es mir auch für die Umsetzung einer Cookieless Domain passender.

Achtung: Dummerweise wurde, wie ich gerade sehen musste, Parallel mit der Beta 2 eingestellt und es wird stattdessen der Einsatz von CDN empfohlen. Ich werde jedoch trotzdem im Rahmen dieses Artikels die Umsetzung mit Parallel beschreiben und einen Folgeartikel für den Umstieg auf das CDN-Modul nutzen.

Die Vorgehensweise ist relativ einfach und beginnt mit der Festlegung einer Domain, welche auf den gleichen Webspace wie die normale Domain zeigen sollte. Allerdings hat die ganze Sache hierbei gleich einen Haken:

1. Möglichkeit: Die Website wird unter einen normalen URL wie beispielsweise www.example.com betrieben.

In diesem Fall benötigt man lediglich eine neue Sub-Domain, die man bei den meisten Hostern im Administrations-Interface (meist als KAS bekannt) kostenlos anlegen kann.

2. Möglichkeit: Man hat, wie meine Wenigkeit, auf das www komplett verzichtet und betreibt seine Website unter example.com.

Dann benötigt man leider eine extra CDN-Domain, was meist nur kostenneutral zu lösen ist, sofern man noch Inklusiv-Domains bei seinem Hoster frei hat. Glücklicherweise blieb mir bei Host Europe eine kostenpflichtige Domain erspart, da man dort die Möglichkeit hat, eine kostenlose Sub-Domain unter einer Domain aus dem Portfolio von Host Europe zu erstellen. Ich habe mich hierbei für die Sub-Domain cdn.he-hosting.de entschieden (KAS -> Punkt Domains -> Third-Level-Domain festlegen).

Nachdem man Parallel installiert/aktiviert hat und die neue (Sub-)Domain aktiv ist, geht man im Admin-Interface von Drupal auf den Menü-Punkt Einstellungen -> Leistung und dort zum Bereich Bandbreiten-Optimierungen. In den dortigen Einstellungen hinterlegt man bei Enter domain - CSS, JS und IMG die Domain im nachfolgenden Format und aktiviert anschließend das Modul (Enable Parallel):

  //cdn.he-hosting.de  

Hinweis: Die Schreibweise ist etwas komisch, soll aber die Nutzung von http und https durch das Modul ermöglichen.

Nun sollten die URLs aller CSS- und JavaScript-Dateien im generierten HTML-Quelltext bereits den CDN enthalten. Lediglich bei Image-Tags innerhalb meines Themes musste ich selber Hand anlegen und diese als absolute CDN-Angaben hinterlegen.

Vorher:

  /sites/all/themes/custom/mytheme/images/tolles_bild.jpg  

Nachher:

  //cdn.he-hosting.de/sites/all/themes/custom/mytheme/images/tolles_bild.jpg  

Wichtig: Da derzeit die Website unter beiden Domains erreichbar ist und Google Duplicate Content nicht wirklich mag, ist es noch sinnvoll Regeln für beide Domains in der .htaccess zu hinterlegen.

    ##
  # Explicitly redirect if a file on cdn is not found.
  ##
  RewriteCond %{HTTP_HOST} ^cdn\.he-hosting\.de [NC]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ http://blog-das-oertchen.de/$1 [L]

  ##
  # Do not dispatch dynamic resources via cdn.
  ##
  RewriteCond %{HTTP_HOST} ^cdn\.he-hosting\.de [NC]
  RewriteCond %{REQUEST_FILENAME} \.(php|html)$
  RewriteRule ^(.*)$ http://blog-das-oertchen.de/$1 [L]  

Hinweis: Diese Regeln gehören in den Code-Block <IfModule mod_rewrite.c> unterhalb der Angabe für die RewriteBase und sollen dazu dienen, Anfragen für nicht vorhandene Dateien, sowie für HTML- und PHP-Dateien auf die Website-Domain umzuleiten. Somit muss in der RewriteCond die CDN-Domain stehen (mit Backslashes vor allen Punkten) und in der RewriteRule die normale Domain.

Dummerweise erkennt YSlow die neue Domain noch nicht als CDN und man muss hierfür selbst Hand anlegen:

  1. im Firefox als URL about:config eingeben
  2. die Sicherheitsabfrage zur Gewährleistung (auf eigene Gefahr hin) bestätigen
  3. Rechtsklick im Fenster und Neu -> String auswählen
  4. Eigenschaftsname extensions.yslow.cdnHostnames
  5. String-Wert cdn.he-hosting.de (die neue CDN-Domain)

Fazit

Auch dieses Mal ist die .htaccess wieder ein wenig gewachsen und die Sache mit dem Anpassen der img-Tags störte mich ein wenig, doch ein Ergebnis von 95/100 Punkten im Page Speed Score belohnt mich im Moment für meine bisherigen Bemühungen. Natürlich sind die entsprechenden Punkte (ETags/CDN) derzeit nicht komplett gelöst, da ich noch einige externe Grafiken von einigen Blog-Verzeichnissen einbinde.

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.

Kommentare

Danke für die Erwähnung. Ich freue mich immer wieder, wenn auch ältere Artikel noch auf Aufmerksamkeit stoßen und weiter helfen können.

Gerne doch, besuche Dein Crazy Toast Blog fast täglich und finde immer wieder nützliche Dinge.

P.S.: Hättest Du bei allen Deinen bisherigen Kommentaren, die identische Blog-URL angegeben (und nicht nur beim ersten), würde Dein nächster Kommentar automatisch freigeschaltet.

Gern geschehen, denn ohne Deinen Blog-Beitrag hätte ich das Modul vermutlich nie gefunden.

P.S.: Danke für die Glückwünsche :-)

Neuen Kommentar schreiben

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als rel="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, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne HTML-Tag in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.