使用YUI压缩器时,我应该先合并再压缩,还是先压缩再合并?

5

我看到有人说,如果你先合并再压缩,可能会出现问题,所以应该先压缩再合并(例如,参见此问题的评论)。但是,我从未见过这些问题的示例,也没有遇到过这些问题。而且我也找不到YUI开发人员关于最佳实践的任何官方说明。

2个回答

10

由于压缩算法的工作方式,合并和压缩应该可以给我们带来最好的结果。

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开发人员有关压缩方法的视频

解析GZIP格式


3

合并再压缩。如果同一个值在多个文件中都被找到,则所有出现的情况都将被压缩后的表示所替换。如果先进行压缩,则这种情况不可能发生,结果会得到一个不太优化的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接