2010-01-08 9 views
6

Ich verkleinere meine css und js Dateien im laufenden Betrieb mit google.codes minify. Ich habe auch meine .htaccess deflate auf alle meine CSS-und JS-Dateien - der Grund, dass einige js-Dateien (wie shadowbox und tinymce) Verweis auf andere js-Dateien im Code. Also ich komprimiere mit Apache deflate und auch komprimiere einige js und CSS-Dateien mit gzip - ich verursache Overhead, indem ich dies tun - zuerst gzipping (minify) und dann zlib (deflate) wird wieder durchlaufen. Oder Apache deflate ignoriert die bereits gezippten Dateien mit den Attributen, die in den Headern durch minify gesetzt wurden. Hat jemand Erfahrungen damit?Deflate und Minify kombinieren - erzeuge ich Overhead?

+0

Das ist eine wirklich gute Frage! Ich habe keine Ahnung, was die Antwort ist, aber der Autor von Minify scheint sehr auf seine Diskussionsgruppe reagiert: https://groups.google.com/group/minify – Annie

Antwort

5

Minifying + Deflating/Gzipping funktioniert gut zusammen.

Ich benutze Mod-Rewrite, um diesen Zweck zu tun, ich habe alle css/js-Dateien in 2 Versionen, original und .css.gz/.js.gz Version vor-gebaut.

Der Browser sendet einfach die .js/.css-Anfrage, der Server prüft die Existenz von .js.gz/.css.gz und gibt den Inhalt zurück, wenn bestimmte Bedingungen erfüllt sind.

So ist es nicht für js/css-Datei wichtig sind on the fly von js geladen (zum Beispiel Ihrer shadowbox oder tinymce)

Grundsätzlich, wie dieser

RewriteEngine On 
RewriteBase/

#Check for browser's Accept-Encoding, 
RewriteCond "%{HTTP:Accept-Encoding}" "gzip.*deflate|deflate.*gzip" 

#check file name is endswith css or js 
RewriteCond %{REQUEST_FILENAME} "\.(css|js)$" 

#check existance of .gz file name 
RewriteCond %{REQUEST_FILENAME}.gz -s 

#rewrite it to .js.gz or .css.gz 
RewriteRule ^.*$ %{REQUEST_URI}.gz [L] 

#update some response header 
<FilesMatch "\.js\.gz$"> 
    AddEncoding gzip .gz 
    ForceType "text/javascript" 
</FilesMatch> 

<FilesMatch "\.css\.gz$"> 
    AddEncoding gzip .gz 
    ForceType "text/css" 
</FilesMatch> 
+0

Danke dafür! Tolles Skript, das du da hast! Aber Sie wissen, das Tool minify (nicht die Minimierung im Allgemeinen) von Google tatsächlich verkleinert und sendet die Dateien mit der Komprimierung und dann würde ich es wieder mit dem Server-Teil (Apache Deflate on the fly) tun. Und wenn ich es zweimal gemacht habe, habe ich mich gefragt ob ich Overhead kreiere ..? Entschuldigung, wenn ich nicht klar war ... –

+0

Du meinst doppelte Gipping? Ich schätze, es wird nicht, weil die Browser nicht wissen würden, ob sie das Entpacken zweimal machen müssen. – YOU

1

gzip verwendet den zlib-Komprimierungsalgorithmus , und die meisten Bytefolgen werden beim zweiten Mal nicht gut komprimiert.

+0

oh ich wusste nicht gzip verwendet zlib libraries .. ich dachte, das war der unterschied zwischen gzip und deflate. Gzip mit gut Gzip-Bibliotheken und deflate mit zlib-Bibliotheken. aber die Frage ist, wird die Datei doppelt komprimiert werden - ich bin mir sicher, dass es nicht viel kleiner wird - aber der Client müsste zuerst deflatet und dann die minimierten Dateien dekomprimieren - das gleiche für den Server. also muss da oben sein ..? –

+3

Wenn Sie bereits wissen, dass es nicht kleiner wird, warum dann? :) –

1

Minify liefert die Dateien nicht über Apache, daher gibt es keine Doppelcodierung.

Mit dem DEFLATE-Filter gzipiert Apache jedes Mal die angeforderte Datei. Minimieren gzipiert die Datei bei der ersten Anforderung und sendet dann die im Voraus gezippte zwischengespeicherte Version für spätere Anforderungen.

Da es PHP-basiert ist, wird es für Flexibilität und Wartungsfreundlichkeit eingesetzt, aber wenn Sie einen Proxy-Cache davor werfen, wird es genauso gut funktionieren wie die S.Mark-Konfiguration.