【问题标题】:When using the YUI compressor, should I combine then minify, or minify then combine?使用 YUI 压缩器时,我应该先合并再缩小,还是先缩小再合并?
【发布时间】:2013-11-13 19:23:24
【问题描述】:

我读过一些人说如果先合并然后再缩小可能会出现问题,并且您应该始终先缩小再合并(例如参见 this question 上的 cmets。)但是,我从未见过示例这些问题是什么或我自己遇到过。我也无法从 YUI 开发人员那里找到任何官方说明最佳实践的内容。

【问题讨论】:

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


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-04-02
        • 2018-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2014-11-25
        • 1970-01-01
        相关资源
        最近更新 更多