Як я можу оцінити розмір мого gzipped-сценарію?


76

Як я можу оцінити розмір мого файлу JavaScript після його архівування в архів? Чи є для цього Інтернет-інструменти? Або це схоже на використання winzip, наприклад?

Відповіді:


49

http://closure-compiler.appspot.com/home дозволяє вставляти код і надаватиме вам ступінь стиснення для певного файлу до та після GZIP.

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)

Ви можете використовувати параметри досить друкованого та пробілу, щоб оцінити стиснення неменфікованого вмісту.

Якщо вам потрібна оцінка:

  • Почніть із 100 файлів JS, які пройшли той самий конвеєр мініфікації.
  • Для кожного файлу обчисліть співвідношення розмірів між gzip -c "$f" | wc -cіwc -c "$f"
  • Середнє значення цих коефіцієнтів - це наближення стиснення, яке слід очікувати для подібного файлу JS.

Cygwin містить реалізації командного рядка gzipта wcдля Windows.


Дякую! Я спробую Cygwin, але наразі компілятор закриття дав мені потрібну відповідь.
Крістоф

111

Якщо ви користуєтеся Unix - gzip -c filename.min.js | wc -cдасть вам байт базування файлу gzipped


5
@Christophe: gzip доступний у Windows через Cygwin або UnxUtils.
Маурісіо Шеффер

4
Дякую, це також корисно знати необроблений розмір розпакованого байту, виконуючи gunzip -c myfile | wc -cабоzcat myfile | wc -c
Adrien Schuler

2
Для того, щоб одержати не-архівованої розмір файлу не-архівувати: cat filename.js | wc -c.
Джес Телфорд,

11

Прямо від терміналу,

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

Якщо вам потрібен оригінальний розмір для вмісту,

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

Щоб отримати його програмно, є такі утиліти, як gzip-size . Це пакет вузлів, але ви можете встановити його глобально як загальний інструмент.


9

7-zip підтримує стиснення до формату GZIP.

Я часто використовую це для наближення та порівняння розмірів файлів.

Створюючи архів, знайдіть Archive Formatі gzipце 3-й варіант.

Оновлення:

У коментарях ми обговорили, що може існувати різниця між стисненням GZIP 7-zip та фактичним стисненням GZIP сервера. Отже, я порівняв, використовуючи лише домашню сторінку http://www.google.com/ .
Корисне навантаження GZIP від ​​Google становило 36 678 байт. 7-zip, з налаштуванням "gzip Normal", становив 35 559 (на 3% менше). З налаштуванням "Найшвидший gzip" він становив 37 673 (на 3% більше).

Отже, коротко: 7-zip мав результати, які були приблизно на 97% точними .


1
На жаль, 7-zip може створювати * менші архіви, ніж більшість пакувальників CLI GZIP. Чудово, якщо ви хочете найменший, поганий, якщо ви хочете отримати точний підрахунок байтів для того, що більшість веб-серверів будуть робити на льоту (що, я вважаю, передбачуваний сценарій?
tomByrer

@tomByrer Дякую за інформацію ... чи можете ви підкріпити її будь-якою документацією? 7-zip має безліч варіантів gzip, можливо, деякі з них можна налаштувати на CLI GZIP.
Скотт Ріппі

Це найкращий тест, який я можу зараз окулярити. Я зробив невелике порівняння gzip з gzip проти 7zip проти zopfli тиждень тому; Мені доведеться додати більше тестів та форматування, що додасть часу. Тим часом, чому б вам не провести такі тести, щоб підтвердити свою думку, будь ласка? :)
tomByrer

@tomByrer О, я думаю, ти розгубився. Можливо, мені потрібно переформулювати свою відповідь. 7-Zip ( додаток ) підтримує різні формати стиснення, включаючи GZIP. Я вже не кажу про 7z ( формат стиснення ), який, безсумнівно, кращий за gzip.
Скотт Ріппі,

1
Добре, я оновив свою відповідь за допомогою швидкого тесту. Я протестував google.com і виявив, що 7-zip на 3% менше. Для більшості людей це повинно бути прийнятним.
Скотт Ріппі,


2

З ядром вузла ви можете використовувати довжину буфера zlib.gzip для визначення розміру gzip:

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);

1

Якщо ви хочете порівняти розміри файлів, що не стиснуті, зірвані з архіву, та brotli'ed для всієї папки: (за умови, що ви хочете відфільтрувати *.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

Зразок виводу (розділений табуляцією, щоб скопіювати в електронну таблицю):

foo.js 39035   10150   8982
bar.js 217000  68978   56337

Видалено використання непотрібного тимчасового файлу та збереження вихідних даних у filesizes.log. Додано коми до виводу для поліпшення читабельності. Вирізаний рівень стиснення gzip до 9, щоб відповідати вже максимальному рівню стиснення brotli 11.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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.