我有点活泼的讨论的关于精简Javascript和CSS与的人更喜欢使用Gzip。

我会打电话给这个人X.

X说,Gzip已经minifies代码,由于你的拉链文件。

我不同意。拉链是一个 无损 方法的萎缩filesize.无损的装置原来必须完全恢复,意味着信息必须存放到能够恢复的空间,联合国需要的人物,评论的代码和其他一切。这需要更多空间,因为更多的必须加以压缩。

我有没有方法的试验,但我认为,Gzip这个代号:

.a1 {
    background-color:#FFFFFF;
    padding: 40px 40px 40px 40px;
}

仍然会比Gzip这个代号:

.a1{body:background-color:#FFF;padding:40px}

是不是有谁可以证明这个正确或错误。
请不来说"这是正确的,因为这是什么我总是使用"。

我要求对科学证据在这里。

有帮助吗?

解决方案

测试非常简单。我拿了你的js,把它们放在不同的文件中并在它们上运行gzip -9。这是结果。这是在运行Cygwin和gzip 1.3.12的WinXP机器上完成的。

-rwx------  1 xxxxxxxx mkgroup-l-d     88 Apr 30 09:17 expanded.js.gz

-rwx------  1 xxxxxxxx mkgroup-l-d     81 Apr 30 09:18 minified.js.gz

这是使用真实世界JS示例的进一步测试。源文件是<!> quot; common.js <!> quot;原始文件大小为73134字节。缩小,它达到26232字节。

原始文件:

-rwxrwxrwx 1 xxxxxxxx mkgroup-l-d 73134 Apr 13 11:41 common.js

缩小文件:

-rwxr-xr-x 1 xxxxxxxx mkgroup-l-d 26232 Apr 30 10:39 common-min.js

使用-9选项gzip原始文件(与上面相同的版本):

-rwxrwxrwx 1 xxxxxxxx mkgroup-l-d 12402 Apr 13 11:41 common.js.gz

使用-9选项gzipped缩小文件(与上面相同的版本):

-rwxr-xr-x 1 xxxxxxxx mkgroup-l-d  5608 Apr 30 10:39 common-min.js.gz

如您所见,各种方法之间存在明显差异。最好的办法是缩小和缩小它们。

其他提示

以下是使用<!>“真实生活<!>来自我网站的CSS文件。 CSS Optimiser 用于缩小。 Ubuntu附带的标准Linux归档应用程序用于Gzipping。

原文: 28,781 字节
缩小: 22,242 字节
Gzipped: 6,969 字节
Min + Gzip: 5,990 字节

我个人的意见是首先去Gzipping,因为这显然是最大的区别。至于缩小,取决于你的工作方式。您必须保留原始CSS文件,以便进一步编辑。如果在每次更改后都不打扰你缩小它,那就去吧。

(注意:还有其他解决方案,例如在提供文件时通过minifier <!>“on-demand <!>”运行它,并在文件系统中缓存它。)

在测试这样的:这两段的CSS是平凡小,所以他们不受益于GZIP compression-加GZIP的小标题单独会失去所取得的成果。在现实中你会不会有一个CSS文件,这个小而关心压缩。

缩小+gzip压缩超过只是gzip

答案的最初的问题是,是的,缩小+gzip将获得大量更多的压缩比gzip。这是真实的任何非微不足道的例子(即任何有用的JS或CSS代码超过几百个字节)。

对于这方面的例子中的作用, 抓住Jquery的源代码 这是可以精简和压缩的压缩它们都与gzip看一看。

值得注意的是,Javascript好处很多,从缩小比以及优化CSS,但仍有一个好处。

推理:

GZIP compression是无损的。这意味着它具有储存所有文本,包括确切的空白,评论,只要的变量名称等,使他们能够完美地再现以后。另一方面,缩小是有损的。如果你压缩你的代码,你去除多的信息,从你的代码,而使不那GZIP需要保护。

  • 缩小放弃不必要的空白,使空间只有在必要的语法的原因。
  • 缩小删除的意见。
  • 代码缩小可能的替代标识符的名称,与较短的名称在那里不会有副作用。
  • 代码缩小可能使微不足道'的编译器优化'的代码这是唯一可能通过实际分析代码
  • CSS缩小可能消除多余的规则或结合的规则具有相同的选择。

你是对的。

缩小比gzipping不同(如果是这样的话,它们将被称为相同)。例如,gzip这是不一样的:

var myIncrediblyLongNameForThisVariableThatDoesNothingButTakeUpSpace = null;

然后缩小最终结果:

var a = null;

当然,在大多数情况下,我会说最好的方法是缩小FIRST然后缩小Gzip,而不仅仅是缩小或压缩,尽管取决于代码,有时只是缩小或gzipping会给你比两者都更好的结果。

有一个门槛在其gzip-编码是有利的。一般的规则是:较大的文件,更好地压缩和gzip将赢得手了。当然你也可以缩小第一然后gzip之后。

但是,如果我们谈论的是与gzip缩小在一块小小的文字没有超过100bytes长,一个"目标"的比较是不可靠的,甚至是毫无意义,除非我们拿出一个基线文本,用于建立一个标准的手段的基准,就像一个存有类型的但是写在Javascript或CSS。

因此,让我提出基准的最新版本的能力和脱(未压缩版本)使用我的 脂肪的缩减 (PHP)代码(只是普通的剥关空格和评论,没有缩短的变数,没有baseX编码)

这里的结果是缩小与gzip(在保守的5级压缩)与缩小+gzip:

MooTools-Core
-------------
Baseline 102,991 bytes
Minified 79,414 (77.1% of original)
Gzipped 27,406 (26.6%)
Minified+Gzipped 22,446 (21.8%)

jQuery
------
Baseline 170,095
Minified 99,735 (58.6% of original)
Gzipped 46,501 (27.3%)
Minified+Gzipped 27,938 (16.4%)

之前任何人跳枪,这不是一场战斗的JS库。

正如你可以看到,简化+gzip压缩给你更好的压缩 在大文件.缩小的代码有其优点,但主要的因素是多少空白和意见是存在的原始代码。在这种情况。有更多的所以它提供了更好的缩小(更多空格在内的文档).Gzip压缩的力量是多少重复存在的内容。因此,它不是关于缩小与gzip。他们做不同的事情。和你得到最好的两个世界通过使用这两者。

为什么不同时使用?

很容易测试:只需将css的文本放在文本文件中,然后使用像linux上的gzip这样的归档文件来压缩文件。

我刚刚完成了这个,而且对于第一个css,它的大小是184个字节 而对于第二个162字节。

所以,你是对的,即使对于gzip压缩文件,白色空间也很重要,但正如从这个小测试中可以看到的那样,对于非常小的文件,压缩文件的大小可能大于原始文件的大小。

这只是因为您的示例的大小非常小,对于较大的文件,gzipping会为您提供较小的文件。

我没有看到有人提到Mangling,所以我发布了我的结果。

以下是我使用UflifyJS进行缩小和Gzip的一些数据。我有大约20个文件,我用大约2.5MB连接在一起评论和所有。

Concat文件2.5MB

uglify({
    mangle: false
})

缩小而不破损:929kb

uglify({
    mangle: true
})

缩小和损坏:617kb

现在,如果我拿这些文件并对它们进行gzip,我将分别得到239kb和190kb。

有一种非常简单的测试方法:创建一个仅包含空格的文件和另一个非常空的文件。然后Gzip两个并比较他们的大小。带有空格的文件当然会更大。

当然<!>“人类<!>”;保留布局或其他一些重要事物并删除任何不需要的垃圾(空格,注释,冗余等)的有损压缩将比无损gZip压缩更好。

例如,标记或函数名称之类的内容很可能具有一定的长度来描述其含义。用一个字符长的名称替换它将节省很多空间,并且无法进行无损压缩。

顺便说一下,对于CSS,有像 CSS压缩器这样的工具那将为你做有损的工作。

但是,在组合<!>“有损优化<!>”时,您将获得最佳效果。和无损压缩。

当然,您可以测试 - 将您的文件写入文件并使用 zlib 进行gzip。您也可以尝试使用<!>“gzip <!>”;实用程序。

回到你的问题 - 源的长度和压缩结果之间没有明确的关系。关键点是'熵'(源中的每个元素有多么不同)。

所以,这取决于你的来源。例如,许多连续空格(例如,<!> gt; 1000)可以被压缩为与少数(例如,<!> <10)空格相同的大小。

这是gziping两个文件时的结果

bytes  File
45     min.txt
73     min.gz

72     normal.txt
81     normal.gz

你是正确的,minify + gzip结果更少的字节。但是没有科学证据。

你怎么没有测试方法?

将代码缩小到一个文件中,并保留<!> quot; unminified <!> quot;另外一个。上传到能够gziping输出的web服务器(例如,用于Apache的mod_deflate),为firefox安装Firebug扩展,清除缓存并访问这两个文件。 Firebug的<!>“NET <!>”;选项卡将包含传输的确切数据量,比较那些并且您有<!> quot; empirical <!> quot;证明。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top