我看到有人说,如果你先合并再压缩,可能会出现问题,所以应该先压缩再合并(例如,参见此问题的评论)。但是,我从未见过这些问题的示例,也没有遇到过这些问题。而且我也找不到YUI开发人员关于最佳实践的任何官方说明。
我看到有人说,如果你先合并再压缩,可能会出现问题,所以应该先压缩再合并(例如,参见此问题的评论)。但是,我从未见过这些问题的示例,也没有遇到过这些问题。而且我也找不到YUI开发人员关于最佳实践的任何官方说明。
由于压缩算法的工作方式,合并和压缩应该可以给我们带来最好的结果。
目前最流行的压缩算法是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)};
这将使算法更加高效。尽管这只是一个非常简化的例子,但在更大的代码块中,变量甚至函数名称可以被其缩小版本替换时,做事情的顺序将变得更加重要。
一些更多的来源:
合并再压缩。如果同一个值在多个文件中都被找到,则所有出现的情况都将被压缩后的表示所替换。如果先进行压缩,则这种情况不可能发生,结果会得到一个不太优化的版本。