Jörg Reinholz: durch jquery verursachten Traffic reduzieren

Beitrag lesen

dedlfix hat dich bereits richtig auf den CDN hingewiesen.

Das stößt aber manchmal auf Bedenken rechtlicher oder technischer Natur.

Ratschläge hierzu:

1.)
Verwende die "minifizierte" Version. Die ist viel kleiner!

2.)
Gib die Version mit an - Falls Du die Version mal wechselst holt der Browser dann auch die richtige ab. Mit 'src="js/jquery.js"' wird das nicht funktionieren. etwas wie "/js/jquery-1.9.1.min.js" ist also besser.

3.)
Du solltest, Dedlfix hat es richtig erwähnt, Header verwenden.

4.)
Packe die Dateien. Es ist keine schlechte Idee, die Dateien komprimiert (hier mit gz) vorzuhalten und diese an den Client auszuliefern. Content Negoation wäre hier also statt mod deflate oder dem Skript unten das Mittel der Wahl. Falls das nicht einzurichten geht habe ich noch eine Lösung in PHP, die aber entweder eine Anpassung des Links oder aber eine Regel in der htaccess nötig macht.

Statt jetzt dafür ein Beispiel zu liefern stelle ich Dir meine Cache-Funktion (Die ist für (m)ein CMS) vor. Die schaut nach, ob es einen Cache der Datei gibt (das entfällt bei Dir), dann ob der Browser Gezipptes akzeptiert.

Wenn der Browser Gezipptes NICHT akzeptiert liefert der Server den Klartext, sonst die statisch vorhandene gezippte Version der Datei aus. (Ist die datei nicht vorhanden wird die Webseite "on the fly"aus den Daten erzeugt, die Cache-Datei und deren gezippte Version erzeugt und die Webseite zum Client geschickt- davon ist aber in der Funktion nichts zu sehen...)

Beachte also: Du musst das an Deine Erfordernisse anpassen - Beachte hier auch die von dedlfix schon erwähnten header, die natürlich z.B. mittels .htaccess in Deinem JS-Verzeichnis zu setzen sind.

function TestAndSendCache() {  
        $BrowserCacheDauer=60*60*24*3; #Sekunden - #Beispiel:Drei Tage  
  
        if ( isset ($_REQUEST['seite']) && (! 'Error 404'==$_REQUEST['seite']) )  {  
                return false;  
        }  
  
        if (is_dir('data/cache/'))  {  
                $CacheDir='data/cache/';  
        } else {  
                return false;  
        }  
        if (! isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {  
                $_SERVER['HTTP_ACCEPT_ENCODING']=false;  
        }  
        $exp_gmt = gmdate("D, d M Y H:i:s", time() + $BrowserCacheDauer) . ' GMT';  
        $mod_gmt = gmdate("D, d M Y H:i:s", getlastmod()) . ' GMT';  
        if (false===strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {  
                $CacheFile=$CacheDir.md5($_SERVER["REQUEST_URI"]);  
                if (is_file($CacheFile) && is_readable($CacheFile)) {  
                        header ('Expires: ' . $exp_gmt);  
                        header ('Cache-Control: public, max-age=' . $BrowserCacheDauer);  
                        readfile($CacheFile);  
                        exit;  
                }  
        } else {  
                $CacheFile=$CacheDir.md5($_SERVER["REQUEST_URI"]).'.gz';  
                if (is_file($CacheFile) && is_readable($CacheFile)) {  
                        header ('Expires: ' . $exp_gmt);  
                        header ('Cache-Control: public, max-age=' . $BrowserCacheDauer);  
                        header ('Vary: Accept-Encoding');  
                        header ('Content-Encoding: gzip');  
                        readfile($CacheFile);  
                        exit;  
                }  
  
        }  
        return false;  
}  

Jörg Reinholz