如何估算压缩后的脚本的大小?


Answers:


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的包含的命令行实现gzipwc用于Windows。


谢谢!我将尝试Cygwin,但就目前而言,闭包编译器为我提供了所需的答案。
Christophe

111

如果您使用的是UNIX,gzip -c filename.min.js | wc -c则将为您提供gzip压缩文件的字节数


5
@Christophe:在Windows上可以通过Cygwin或UnxUtils使用gzip。
Mauricio Scheffer

4
谢谢,这也是有用做知道原始解压缩字节大小gunzip -c myfile | wc -czcat myfile | wc -c
阿德里安·舒勒

2
为了得到一个非gzip压缩文件的未gzip压缩的大小: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是第三个选项。

更新:

在评论中,我们讨论了7-zip的GZIP压缩与实际服务器的GZIP压缩之间可能存在差异。因此,我仅使用http://www.google.com/的主页进行了比较。
Google的GZIP有效负载为36,678字节。带有“ gzip普通”设置的7-zip为35,559(缩小3%)。使用“ gzip最快”设置时,它为37,673(大了3%)。

因此,长话短说:7-zip的结果准确率约97%


1
对不起,7-ZIP可以使*小比大多数CLI GZIP加壳档案。如果您想要最小的设备,那么好,如果您想为大多数Web服务器即时生成精确的字节数,则不好(我认为这是预期的情况?
tomByrer 2014年

@tomByrer感谢您提供信息...您可以备份任何文档吗?7-zip有很多gzip选项,也许其中一些可以配置为与CLI GZIP匹配。
Scott Rippey 2014年

是我现在可以进行Goggle的最佳测试。一周前,我将gzip与7zip与zopfli做了一个小的gzip比较。我将不得不添加更多的测试和格式,这会增加时间。同时,为什么不提供这样的测试来证明你的观点呢?:)
tomByrer 2014年

@tomByrer哦,我觉得您很困惑。也许我需要重新措辞。7-Zip(该应用程序)支持多种压缩格式,包括GZIP。我不是在谈论7z(压缩格式),它无疑比gzip更好。
Scott Rippey 2014年

1
好吧,我通过快速测试更新了答案。我测试了google.com,发现7压缩小3%。对于大多数人来说,这应该是可以接受的。
Scott Rippey


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

如果您要比较整个文件夹的未压缩,压缩和残破的文件大小:(假设您要过滤*.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相匹配的11已经刷爆出brotli压缩级别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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.