5

我读过一些人说如果你合并然后缩小可能会出现问题,并且你应该总是先缩小然后合并(例如参见关于这个问题的评论。)但是,我从来没有见过这些问题的例子是或遇到过他们自己。我也找不到任何来自 YUI 开发人员的官方说明最佳实践是什么。

4

2 回答 2

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. 

缩小

知道了这一点,我们可以看到,如果我们重新使用与函数参数名称相同的字符,这对算法很重要——这正是缩小所做的(参见:闭包编译器)。如果给定这两个函数:

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)};

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

更多来源:

谷歌开发者关于压缩方法的视频

剖析 GZIP 格式

于 2013-11-05T21:36:48.987 回答
3

合并然后缩小。如果在多个文件中找到相同的值,则所有出现的地方都将被缩小的表示替换。如果先缩小,那么这将是不可能的,从而导致版本不够优化。

于 2013-11-05T21:30:52.527 回答