GZip-Komprimierung

  • Hallo!
    Ich möchte für meine Homepage die JavaScript Dateien (jQuery, jQueryUI...) gzipped ausliefern, allerdings nur an die Browser, die das unterstützen.
    Die Dateien liegen sowohl in komprimierter (z.B. jQuery.js.gz) als auch in dekomprimierter (jQuery.js) Form vor, um Serverlast zu sparen.
    Wie lässt sich das jetzt umsetzten?


    Ich bin auf folgenden Link gestoßen:
    <!-- m --><a class="postlink" href="http://floern.com/webscripting/dateien-mit-htaccess-gzip-komprimieren">http://floern.com/webscripting/dateien- ... mprimieren</a><!-- m -->
    (Natürlich für JavaScript angepasst)
    Allerdings erhalte ich mit dieser Methode einen "Internal Server Error" (sowohl auf meinem XAMPP als auch online bei <!-- m --><a class="postlink" href="http://all-inkl.com">http://all-inkl.com</a><!-- m -->).


    Ich hatte mir noch folgende PHP-Lösung überlegt:

    PHP
    <span class="syntaxdefault"><br /></span><span class="syntaxcomment">// js.php<br /></span><span class="syntaxdefault">$accept </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"HTTP_ACCEPT_ENCODING"</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">$file </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"QUERY_STRING"</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"#^[a-zA-Z0-9.-_]+\.js$#"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"QUERY_STRING"</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">?</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"QUERY_STRING"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">:</span><span class="syntaxdefault"> </span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(empty(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> exit</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Type: text/javascript"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$accept</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"gzip"</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Encoding: gzip"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    include $file </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">".gz"</span><span class="syntaxkeyword">;<br />}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    include $file</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault"> </span>


    Code
    <!-- index.php -->
    ...
    <script src="js.php?jQuery.js"></script>


    Lokal (PHP-Version: 5.3.1) funktioniert diese auch, online (PHP-Version: 5.2.12) meldet er bei einer der JS-Dateien einen "parse-Error", weil er in der gzip-Datei über eine eckige Klammer stolpert.


    Ich bitte um Lösungsmöglichkeiten (sowohl für.htaccess als auch für .php, eines würde reichen)
    DerWaldschrat


    edit: Wenn man in der PHP-Lösung "include" durch "readfile" ersetzt, funktioniert es.
    Allerdings sind die Server-Error bei .htaccess dennoch komisch (mod_rewrite funktioniert eigentlicht)


    edit2: Ohne Gzip wird die Seite nach mehrmaligem Aufrufen schneller geladen als mit, weil dann der Cache wirkt
    => Gzip bringt irgendwie nix

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!