【发布时间】:2013-11-13 19:23:24
【问题描述】:
我读过一些人说如果先合并然后再缩小可能会出现问题,并且您应该始终先缩小再合并(例如参见 this question 上的 cmets。)但是,我从未见过示例这些问题是什么或我自己遇到过。我也无法从 YUI 开发人员那里找到任何官方说明最佳实践的内容。
【问题讨论】:
标签: javascript css bundling-and-minification yui-compressor
我读过一些人说如果先合并然后再缩小可能会出现问题,并且您应该始终先缩小再合并(例如参见 this question 上的 cmets。)但是,我从未见过示例这些问题是什么或我自己遇到过。我也无法从 YUI 开发人员那里找到任何官方说明最佳实践的内容。
【问题讨论】:
标签: javascript css bundling-and-minification yui-compressor
由于压缩算法的工作方式,合并然后缩小应该会给我们最好的结果。
目前最流行的压缩算法是 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)};
这将使算法更有效率。现在这是一个非常简化的示例,但是在更大的代码块中,变量甚至函数名称可以被它们的缩小版本替换,执行顺序将开始变得重要。
更多来源:
【讨论】:
合并然后缩小。如果在多个文件中找到相同的值,则所有出现的地方都将被缩小的表示替换。如果先缩小,那么这是不可能的,导致版本不够优化。
【讨论】: