Làm cách nào để ước tính kích thước của tập lệnh đã nén của tôi?


76

Làm cách nào để ước tính kích thước tệp JavaScript của tôi sau khi nó được giải nén? Có các công cụ trực tuyến cho việc này không? Hoặc nó tương tự như sử dụng winzip chẳng hạn?

Câu trả lời:


49

http://closure-compiler.appspot.com/home cho phép bạn dán mã và nó sẽ cung cấp cho bạn tỷ lệ nén cho một tệp cụ thể trước và sau 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)

Bạn có thể sử dụng các tùy chọn chỉ in đẹp và khoảng trắng để ước tính độ nén của nội dung không được rút gọn.

Nếu bạn cần ước tính:

  • Bắt đầu với 100 tệp JS đã trải qua cùng một đường dẫn thu nhỏ.
  • Đối với mỗi tệp, hãy tính tỷ lệ kích thước giữa gzip -c "$f" | wc -cwc -c "$f"
  • Trung bình của các tỷ lệ đó là ước tính của độ nén mà bạn nên mong đợi cho một tệp JS tương tự.

Cygwin chứa các triển khai dòng lệnh của gzipwccho Windows.


cám ơn! Tôi sẽ thử Cygwin, nhưng bây giờ trình biên dịch đóng cửa đã cho tôi câu trả lời mà tôi cần.
Christophe

111

Nếu bạn đang sử dụng unix - gzip -c filename.min.js | wc -csẽ cung cấp cho bạn số byte của tệp đã nén


5
@Christophe: gzip có sẵn trên Windows thông qua Cygwin hoặc UnxUtils.
Mauricio Scheffer

4
Cảm ơn, điều này cũng rất hữu ích để biết liệu kích thước byte đã được giải nén bằng cách làm gunzip -c myfile | wc -chayzcat myfile | wc -c
Adrien Schuler

2
Để có được kích thước un-gzip của một tập tin un-gzip: cat filename.js | wc -c.
Jess Telford

11

Trực tiếp từ nhà ga,

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

Nếu bạn cần kích thước ban đầu để so sánh,

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

Để có được nó theo chương trình, có các tiện ích như gzip-size . Đó là một gói nút nhưng bạn có thể cài đặt nó trên toàn cầu như một công cụ chung.


9

7-zip hỗ trợ nén sang định dạng GZIP.

Tôi thường sử dụng điều này để ước tính và so sánh kích thước tệp.

Khi tạo một kho lưu trữ, hãy tìm kiếm Archive Formatgziplà tùy chọn thứ 3.

Cập nhật:

Trong phần nhận xét, chúng tôi đã thảo luận rằng có thể có sự khác biệt giữa nén GZIP của 7-zip so với nén GZIP của máy chủ thực tế. Vì vậy, tôi đã so sánh việc chỉ sử dụng trang chủ của http://www.google.com.vn/ .
Tải trọng GZIP của Google là 36,678 byte. 7-zip, với cài đặt "gzip Normal", là 35,559 (nhỏ hơn 3%). Với cài đặt "gzip Fastest", nó là 37.673 (lớn hơn 3%).

Vì vậy, câu chuyện ngắn: 7-zip có kết quả chính xác khoảng 97% .


1
Rất tiếc, 7-zip có thể tạo * lưu trữ nhỏ hơn hầu hết các trình đóng gói CLI GZIP. Tuyệt vời nếu bạn muốn nhỏ nhất, xấu nếu bạn muốn có một số byte chính xác cho những gì hầu hết các máy chủ web sẽ thực hiện trên ruồi (mà tôi giả định là kịch bản dự kiến?
tomByrer

@tomByrer Cảm ơn bạn đã cung cấp thông tin ... bạn có thể sao lưu nó bằng bất kỳ tài liệu nào không? 7-zip có rất nhiều tùy chọn cho gzip, có thể một số trong số chúng có thể được cấu hình để phù hợp với CLI GZIP.
Scott Rippey

Đây là bài kiểm tra tốt nhất mà tôi có thể Goggle ngay bây giờ. Tôi đã thực hiện một so sánh gzip nhỏ với gzip vs 7zip vs zopfli một tuần trước; Tôi sẽ phải thêm nhiều thử nghiệm và định dạng hơn, điều này sẽ kéo dài thời gian. Trong khi đó, tại sao bạn không cung cấp các bài kiểm tra như vậy để chứng minh quan điểm của bạn? :)
tomByrer

@tomByrer Ồ, tôi nghĩ bạn đang bối rối. Có lẽ tôi cần phải nói lại câu trả lời của mình. 7-Zip ( ứng dụng ) hỗ trợ nhiều định dạng nén, bao gồm cả GZIP. Tôi không nói về 7z ( định dạng nén ), chắc chắn là tốt hơn gzip.
Scott Rippey

1
Được rồi, tôi đã cập nhật câu trả lời của mình bằng một bài kiểm tra nhanh. Tôi đã kiểm tra google.com và thấy rằng 7-zip nhỏ hơn 3%. Đối với hầu hết mọi người, điều này nên được chấp nhận.
Scott Rippey


2

Với lõi nút, bạn có thể sử dụng độ dài của bộ đệm zlib.gzip để xác định kích thước 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

Nếu bạn muốn so sánh các kích thước tệp không nén, được gzipped và brotli'ed cho toàn bộ thư mục: (giả sử bạn muốn lọc *.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

Đầu ra mẫu (được phân tách bằng tab để bạn có thể sao chép vào bảng tính):

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

Đã xóa việc sử dụng tệp tạm thời không cần thiết và lưu đầu ra vào filesizes.log. Đã thêm dấu phẩy vào đầu ra để cải thiện khả năng đọc. Mức độ nén đụng gzip đến 9 để phù hợp với mức độ nén brotli đã maxed-out của 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.