Wie kann ich die Größe meines komprimierten Skripts schätzen?

76

Wie kann ich die Größe meiner JavaScript-Datei nach dem Komprimieren schätzen? Gibt es dafür Online-Tools? Oder ähnelt es beispielsweise der Verwendung von winzip?

Christophe
quelle

Antworten:

49

Mit http://closure-compiler.appspot.com/home können Sie Code einfügen und die Komprimierungsraten für eine bestimmte Datei vor und nach GZIP ermitteln.

Original Size:    90 bytes (100 bytes gzipped)
Compiled Size:    55 bytes (68 bytes gzipped)
Saved 38.89% off the original size (32.00% off the gzipped size)

Sie können die Optionen "Nur hübsch drucken" und "Nur Leerzeichen" verwenden, um die Komprimierung von nicht minimierten Inhalten abzuschätzen.

Wenn Sie einen Kostenvoranschlag benötigen:

  • Beginnen Sie mit 100 JS-Dateien, die dieselbe Minifizierungspipeline durchlaufen haben.
  • Berechnen Sie für jede Datei das Größenverhältnis zwischen gzip -c "$f" | wc -cundwc -c "$f"
  • Der Durchschnitt dieser Verhältnisse ist eine Annäherung an die Komprimierung, die Sie für eine ähnliche JS-Datei erwarten sollten.

Cygwin enthält Befehlszeilenimplementierungen von gzipund wcfür Windows.

Mike Samuel
quelle
Danke! Ich werde Cygwin ausprobieren, aber im Moment gab mir der Closure-Compiler die Antwort, die ich brauchte.
Christophe
111

Wenn Sie unter Unix arbeiten gzip -c filename.min.js | wc -c, erhalten Sie eine Byteanzahl der komprimierten Datei

Zwerg
quelle
5
@Christophe: gzip ist unter Windows über Cygwin oder UnxUtils verfügbar.
Mauricio Scheffer
4
Vielen Dank, dies ist auch nützlich, um die Größe des entpackten Rohbytes zu kennen, indem Sie gunzip -c myfile | wc -coderzcat myfile | wc -c
Adrien Schuler
2
So ermitteln Sie die nicht komprimierte Größe einer nicht komprimierten Datei : cat filename.js | wc -c.
Jess Telford
11

Direkt vom Terminal,

gzip -9 -c path/to/file.js | wc -c | numfmt --to=iec-i --suffix=B --padding=10

Wenn Sie die Originalgröße für Comprison benötigen,

cat path/to/file.js | wc -c | numfmt --to=iec-i --suffix=B --padding=10

Um es programmgesteuert zu bekommen, gibt es Dienstprogramme wie gzip-size . Es ist ein Knotenpaket, aber Sie können es global als allgemeines Tool installieren.

srcspider
quelle
9

7-zip unterstützt das Komprimieren in das GZIP-Format.

Ich benutze dies oft, um Dateigrößen zu approximieren und zu vergleichen.

Suchen Sie beim Erstellen eines Archivs nach Archive Formatund gzipist die dritte Option.

Aktualisieren:

In den Kommentaren haben wir diskutiert, dass es einen Unterschied zwischen der GZIP-Komprimierung von 7-zip und der GZIP-Komprimierung eines tatsächlichen Servers geben kann. Also habe ich nur die Homepage von http://www.google.com/ verwendet .
Die GZIP-Nutzlast von Google betrug 36.678 Byte. 7-zip mit der Einstellung "gzip Normal" war 35.559 (3% kleiner). Mit der Einstellung "gzip Fastest" waren es 37.673 (3% größer).

Kurz gesagt: 7-zip hatte Ergebnisse, die zu 97% genau waren .

Scott Rippey
quelle
1
Sorry, 7-zip kann machen * kleinere Archive als die meisten CLI GZIP Packer. Großartig, wenn Sie das kleinste wollen, schlecht, wenn Sie eine genaue Anzahl von Bytes für das wollen, was die meisten Webserver im
laufenden Betrieb
@tomByrer Danke für die Info ... kannst du sie mit irgendeiner Dokumentation sichern? 7-zip bietet viele Optionen für gzip. Möglicherweise können einige davon so konfiguriert werden, dass sie mit CLI GZIP übereinstimmen.
Scott Rippey
Dies ist der beste Test, den ich derzeit machen kann. Ich habe vor einer Woche einen kleinen gzip-Vergleich mit gzip vs 7zip vs zopfli gemacht; Ich muss weitere Tests und Formatierungen hinzufügen, was die Zeit verlängert. Warum bieten Sie in der Zwischenzeit keine solchen Tests an, um Ihren Standpunkt zu beweisen? :)
TomByrer
@ TomByrer Oh, ich denke du bist verwirrt. Vielleicht muss ich meine Antwort umformulieren. 7-Zip (die Anwendung ) unterstützt mehrere Komprimierungsformate, einschließlich GZIP. Ich spreche nicht von 7z (dem Komprimierungsformat ), das zweifellos besser ist als gzip.
Scott Rippey
1
Okay, ich habe meine Antwort mit einem kurzen Test aktualisiert. Ich habe google.com getestet und festgestellt, dass 7-zip 3% kleiner war. Für die meisten Menschen sollte dies akzeptabel sein.
Scott Rippey
2

Mit Node Core können Sie die Länge des puffers zlib.gzip verwenden, um die Größe von gzip zu bestimmen:

const fs = require('fs');
const util = require('util');
const zlib = require('zlib');
const readFile = util.promisify(fs.readFile);
const gzip = util.promisify(zlib.gzip);

const getGzipSize = filePath => readFile(filePath)
  .then(gzip)
  .then(x => x.length);
charlespwd
quelle
1

Wenn Sie unkomprimierte, komprimierte und brotlierte Dateigrößen für den gesamten Ordner vergleichen möchten : (vorausgesetzt, Sie möchten filtern *.js):

for file in *.js; do printf "$file\t$(cat $file | wc -c)\t$(gzip -kc7 $file | wc -c)\t$(brotli --in $file --out temp.br --force --quality 11 && cat temp.br | wc -c)\n"; done | tee filesizes.log

Beispielausgabe (durch Tabulatoren getrennt, damit Sie sie in eine Tabelle kopieren können):

foo.js 39035   10150   8982
bar.js 217000  68978   56337
jakub.g
quelle
Die Verwendung unnötiger temporärer Dateien und das Speichern der Ausgabe in wurde entfernt filesizes.log. Kommas zur Ausgabe hinzugefügt, um die Lesbarkeit zu verbessern. Gzip-Komprimierungsstufe auf 9 erhöht, um der bereits ausgereiften Brotli-Komprimierungsstufe von 11 zu entsprechen.for file in *.js; do printf "$file\t$(cat $file | wc -c | xargs printf "%'d\n")\t$(gzip -9c $file | wc -c | xargs printf "%'d\n")\t$(brotli -cZ $file | wc -c | xargs printf "%'d\n")\n"; done | tee
mrienstra
0

Sie können gzipsich unter Windows über Gow (Gnu unter Windows) installieren .

TomByrer
quelle