当使用YUI压缩器时,我应该组合然后缩小,还是缩小然后合并?

时间:2013-11-02 20:08:16

标签: javascript css bundling-and-minification yui-compressor

我读过一些人说如果你结合然后缩小会有问题,你应该总是缩小然后合并(参见this question上的评论。)但是,我从未见过这些问题是我自己遇到或遇到的一个例子。我也找不到YUI开发人员的任何官方说明最佳做法。

2 个答案:

答案 0 :(得分:9)

由于压缩算法的工作方式,组合然后缩小应该会给我们带来最好的结果。

GZIP压缩

目前最流行的压缩算法是GZIP。它是如何工作的,它试图引用一个字符(或一个字符串)的位置,并定义这些字符可以重复的次数。

假设你要压缩的字符串是:AABAB

算法会将其分解为:

[0,0]A  - Last occurrence of A was 0 characters ago, and its length was 0
[1,1]A  - Last occurrence of A was 1 characters ago, and its length was 1 char
[0,0]B  - Last occurrence of B was 0 characters ago, and its length was 0
[2,2]AB - Here comes the interesting part. We will only reference the set of
          characters, not occurrence of each character. The last occurrence of AB
          was 2 characters ago, and the length of this set of characters is 2. 

缩小

知道这一点,我们可以看到,如果我们重新使用相同的字符(例如函数参数名称)对算法很重要 - 这正是缩小所做的(参见:closure compiler )。如果给出这两个函数:

function hello(name, surname) {
    alert('Welcome '+ name + ' ' + surname);
}

function logout( id ) {
    alert('Logged out '+ id);
}

输出版本如下:

function hello(a,b){alert("Welcome "+a+" "+b)}
function logout(a){alert("Logged out "+a)};

这将使算法更有效。现在这是一个非常简单的例子,但是在更大的代码块中,变量甚至函数名称可以用它们的缩小版本替换,服务的顺序将开始变得重要。

更多来源:

Google developers video about compression methods

Dissecting the GZIP format

答案 1 :(得分:3)

然后结合然后缩小。如果在多个文件中找到相同的值,则所有出现的内容将被缩小的表示替换。如果首先缩小,那么这将是不可能的,导致不太优化的版本。