Speed up Textpattern (II)
Autor: Alex
Der folgende Artikel ist ein Gastbeitrag von Sencer und richtet sich an fortgeschrittene Textpattern Anwender so wie an diejenigen, die TXP als CMS für Kunden einrichten.
Wie allgemein bekannt sein dürfte, werden CSS Stylesheets mit dem TXP Tag <txp:css /> innerhalb von TXP eingebunden. Je nach Sektion, in der man sich befindet, wird daraus eine andere URL generiert.
Beispiel:
Auf der Startseite erhält man textpattern/css.php?s=default,
in der article Sektion textpattern/css.php?s=article usw.
Hat man alle CSS-Anweisungen aber in ein einziges CSS-Stylesheet gepackt, dann kann man es dem Browser einfacher machen, wenn man dafür sorgt, dass auch immer dieselbe URL ausgespuckt wird. Lautet der CSS-Stil z. B. default, dann erweitert man obigen Tag in den Seitenvorlagen (und/oder Bausteinen) wie folgt:
<txp:css n="default" />
Der Browser weiß nun, dass auf jeder Seite dasselbe Stylesheet verwendet wird und könnte diese cachen. Das wird allerdings zur Zeit bei TXP 1RC3 noch verhindert, können wir aber schnell selbst herstellen:
Öffnet dafür textpattern/publish.php und sucht ab Zeile ca. 158 die if-Abfrage if($send_lastmod). Die Abfrage ist derzeit standardmäßig auskommentiert, doch wir können sie ohne Probleme zu verursachen, schlichtweg entkommentieren.
Das Ergebnis ist, dass der Browser bei Neuabfragen der Seite ein
HTTP/1.1 304 Not Modified bekommt, und der Server die Seite nicht komplett neu generieren und zum Browser übertragen muß.
Da derselbe Code auch für die Generierung der normalen
Seiten zuständig ist, kommt man auch in den Nutzen von 304s.
Es geht aber noch besser. Da man in der Regel nicht alle paar Minuten an seinem CSS herumbastelt, kann man dem Browser sogar mitteilen, dass er für eine bestimmte Zeit erst gar nicht nachfragen muß, sondern direkt seine lokale Kopie benutzen kann. Dafür öffnet man textpattern/css.php und fügt direkt nach der Zeile
$nolog = 1;folgende Zeile ein:
$expires = gmdate('D, d M Y H:i:s \G\M\T', time()+(3600*1));
header("Expires: $expires");
Der Browser weiß nun, dass er eine einmal abgefragte CSS-Datei für eine Stunde lang benutzen kann, ohne erneut nachzufragen. Der Lohn der Mühe ist, dass der Seitenaufbau ab dem zweiten Zugriff auf der Seite schneller vonstatten geht und der Server ein bisschen weniger ackern muß.
Wer, wie ich, ein totaler CSS-Muffel ist :), kann seine CSS-Anweisungen auch in eine ganz normale statische Datei packen und auf dem Server ablegen, die relevanten Pfade ändern, und sich den Webserver von alleine um die Angelegenheit kümmern lassen. Nur bei PHP-Skripten muß man ihm etwas unter die Arme greifen.
Die 3 vorgestellten Veränderungen kann man übrigens auch alle unabhängig voneinander durchführen, da sie nicht voneinander abhängen.
—-
Sencer hat das asy_jpcache Plugin entwickelt und schreibt gelegentlich über Blogsoftware. Lesenswert sind seine beiden Artikel zum Benchmarking:
Wordpress vs. Textpattern – a quick performance benchmark und
Weblog-Software Benchmark II.
Mods & Hacks
| 25.05.05Weitere neue Artikel
Neue TXP Sites
- Unable to connect to del.icio.us