Performance-Optimierung einer TYPO3-Seite – ein Zwischenstand

Ich bin wieder einen Schritt weiter in der Performance-Optimierung einer TYPO3-Seite.

Am meisten genutzt hat dabei die Aktivierung von Expires-Header, die den Browser anleiten bestimmte Elemente (Bilder, Javascript, usw.) zu Cachen. Falls nicht bereits für den Webserver global aktiviert kann man die Einstellungen in der .htaccess-Datei vornehmen. Ein Beispiel gibt es auf snipplr.com.

Weiterhin gilt es unnötigen Code zu entfernen. Das gilt für CSS, Javascript, aber auch nicht benötigte TYPO3-Extension sollte man deaktivieren.

Die Website sollte möglichst aus Cache-baren Elementen bestehen, wenn möglich sollte man in TYPO3 auf USER_INT, COA_INT usw. verzichten.

Für Cache-bare Resourcen wie Bilder kann man eine “statische” Subdomain einrichten, etwa static.meinedomain.com. Für diese Anfragen werden keine Cookie-Daten mitgesendet.

Durch diese Punkte hat sich das Ergebnis in YSlow, einer Firefox-Erweiterung, von Note D oder E auf B verbessert.

Nun habe ich die TYPO3-Extension scriptmerger aktiviert. Je nach Konfiguration muss vor der Aktivierung die .htaccess-Datei erneut erweitert werden (siehe Doku). scriptmerger kann jeweils alle Javascript und alle CSS-Dateien verkleinern, zusammenfassen und komprimieren. Unter Umständen muss man einige Funktionen deaktivieren, wenn diese nicht vom Server unterstützt werden oder den Code anpassen. Mehr zu scriptmerger gibt es z.B. auf typo3blogger.de.
Die Ergänzung verbessert die YSlow-Note auf A. Die Methode musste aber auf vereinzelten größeren Seiten abgeschwächt werden, da sonst die PHP-Speichergrenze erreicht wird (PHP-Fehler, Script-Abbruch).

Dies muss jedoch nicht das Ende der Performance-Verbesserung sein. Hier mal ein paar mögliche weitere Schritte:

  • Quelltext-Optimierung
  • Sprites einsetzen: mehrere Hintergrund-Grafiken zusammenfassen
  • Auslieferung von statischen Webseiten
  • CDN verwenden
  • MySQL-/Datenbank-Optimierung

Einfacher Webauftritt: CMS vs. PHP

Früher wurde die Benutzung eines (Web-)Content Management Systems empfohlen, wenn die Website umfangreich ist, viele verschiedene Leute an der Pflege beteiligt sind oder mit vielen Inhaltsänderungen zu rechnen ist.

Heute hatten wir im Büro eine kurze Diskussion, ob ein vglw. kleiner Webauftritt schneller mit mehreren PHP-Dateien oder mit Hilfe eines CMS realisiert werden kann. Die Website wird aus ca. 10 Seiten, einigen Formularen, Suche, Navigationsmenü bestehen. Wichtig war in diesem Fall allein, mit welcher Vorgehensweise man die Webseiten schneller umsetzen kann. In beiden Fällen ist die Entwicklung der HTML-Vorlage incl. CSS sowie einigen Javascript-Features nötig.

Vorteile für die Version allein basierend auf PHP-Dateien:

  • ohne Suche ist keine Datenbank nötig
  • abgesehen von der Suche, die dann per PHPDig realisiert würde, ist kein System spezifisches Wissen erforderlich (PHP ausgenommen)
  • keine Installation und vglw. wenig Konfiguration
  • tendenziell bessere Performance, weniger Server-Anforderungen, weil kein umfangreiches Software-System geladen werden muss.

Ich persönlich bin mittlerweile der Meinung, dass man mit entsprechender Erfahrung mit einem CMS auch für einen kleineren Webauftritt schneller am Ziel ist:

Viele Redaktionssysteme enthalten bereits viele nützliche Funktionen, einige Fehlerquellen können (“automatisch”) vermieden werden, man hat Zugriff auf Erweiterungen und kann bewährte (Teil-)Lösungen einsetzen.

Ein CMS hat natürlich auch nach dem Going Live mehr Vorteile, wenn die ersten Änderungen und Erweiterungswünsche eintreffen. Dies war aber in diesem Fall – ausnahmsweise – zu vernachlässigen. Mit bestehenden, bewährten Framworks und Systemen kann man insgesamt die Qualität steigern und sich mehr auf die Entwicklung von individuellen Bestandteilen konzentrieren.

Für den erwähnten spezifischen Fall würde ich derzeit TYPO3 einsetzen. Wenn ich es richtig einschätze, gab es bei uns heute für beide Konzepte etwa gleich viel Anhänger. Mich würde mal ein konkreter “Wettkampf” mit gleichzeitig begonnenen Arbeiten interessieren. Aber das möchte derzeit wohl niemand sponsern 😉

Blogs plus in AJAX

Ich kann nicht auf jedem Computer einen Feedreader benutzen, der sich automatisch meldet, wenn ein Blogger einen neuen Eintrag verfasst hat. Deshalb hatte ich mir ein Skript geschrieben, welches den neuesten Eintrag von Blogs, die ich lese, anzeigt. Darüber hatte ich auch im Juli schonmal geschrieben. Mittlerweile habe ich die Cache-Zeit von 30 Minuten auf 3 Stunden erhöht. Zur Not kann man ja den Cache “abstellen”.

Was mich jedoch gestört hat war, dass während die Blogs eingelesen werden die Seite und die Domain “gesperrt” war, also keine weiteren Anfragen beantwortet hat. Ich musste also immer warten, bis die Tabelle vollständig war, konnte mir erst dann die neuesten Einträge heraus suchen und lesen.

Heute Abend habe ich das noch etwas verbessert: Nun werden die Einträge über AJAX geladen. Die letzten Einträge werden somit erst dann angezeigt, wenn sie gelesen wurden. Allerdings wird die Webseite gleich zu Beginn komplett geladen. Es gibt nicht mehr diese “lange Blockade”. 😉

Einziges Manko der neueren Version: Das Aktualisieren ist nicht möglich, wenn Javascript im Browser deaktiviert ist.

Update 2012: neue Adresse