Das folgende Skript lässt sich so für CSS- und JavaScript-Dateien einsetzen. Packt man alle Tipps der vorherigen Artikel zusammen, kommt dabei folgendes Heraus:

<?php

  header('Content-Type: text/javascript');

  $expires = 60*60*24*7;
  header("Pragma: public");
  header("Cache-Control: maxage=".$expires);
  header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');

  $files = array(
    "mootools.js",
    "caption.js"

  );

  $ETag = "";

  foreach ($files as $file) {
    $ETag = dechex(fileinode($file));
    $ETag.= "-".dechex(filesize($file));
    $ETag.= "-".dechex(((filemtime($file).str_repeat("0",6)+0) & (8589934591)));
    $ETag.="-";
  }
  $ETag= md5($ETag);
  header("Etag: $ETag");
  if (trim($_SERVER["HTTP_IF_NONE_MATCH"]) == $ETag) {
    header("HTTP/1.1 304 Not Modified");
    exit;
  }

  if( strpos($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip") !== FALSE){
    ob_start("ob_gzhandler");
  } else {
    ob_start();
  }

  foreach ($files as $file) {
    include($file);
  }

  ob_end_flush();
?>

Das Script wird einfach ins Verzeichnis der JavaScripts (/media/system/js) z. B. unter dem Namen "js_together.php" kopiert. Anschließend werden wird dieses Skript in den Kopf der index.php des Templates eingebunden:

...
<head>

<script type="text/javascript" src="/media/system/js/js_together.php"></script>

<jdoc:include type="head" />
...

Es folgt die Betrachtung der Ladezeiten: Nach dem ersten Aufruf.

JavaScript - Zusammengepackt - Erster Aufruf

Die JavaScript-Dateien "mootools.js" und "caption.js" werden zusammen in der Datei "js_together.php" übertragen. Insgesamt sind das 20,7 KByte. Der Spaß dauert hier gerade mal 569 ms (Messung mit Firebug, von meinem Internetanschluss).

Der erneute Aufruf der Seite ...

JavaScript - Zusammengepackt - Weiterer Aufruf

... bewirkt, dass die Datei "js_together.php" nur die Meldung "304 Not Modified" zurückgibt. Das Ganze passiert in 192 ms. Wieder ein wenig Zeit gespart.

Das Ergebnis nach den Optimierungen aus "der perfekten Lösung für CSS- und JavaScript-Dateien":

Ergebnis first view

Ein großer Erfolg wir dann auch sofort beim erneuten Laden der Seite sichbar:

Ergebnis repeat view

Innerhalb von 1,4 Sekunden ist alles neu geladen. Nur fünf Bilder scheinen noch nicht gecached zu werden. Da muss man nochmal nachfassen.