Компилятор Google Closure не сжимает строковые значения?

Что-то вроде этого:

(function ($, window, document, undefined) {
    'use strict';
    $.fn.demo = function (options) {

        var active = "active";
        var section = ".bb-demo";

        $(section).addClass(active);
        $(section).addClass(active);
        $(section).addClass(active);
        $(section).addClass(active);

    };
})(jQuery, window, document);

Closure Simple mode приводит к 200 байт:

(function(a,b,c,d){a.fn.demo=function(b){a(".bb-demo").addClass("active");a(".bb-demo").addClass("active");a(".bb-demo").addClass("active");a(".bb-demo").addClass("active")}})(jQuery,window,document);

В то время как компрессор YUI приводит к 169 байт:

(function(c,b,a,d){c.fn.demo=function(e){var g="active";var f=".bb-demo";c(f).addClass(g);c(f).addClass(g);c(f).addClass(g);c(f).addClass(g)}})(jQuery,window,document);

Не существует способа сжать эти строковые переменные в Closure? почему он этого не делает? Это из-за лучших результатов с точки зрения производительности?

Ответ 1

Это описано в разделе Часто задаваемые вопросы о компиляторе Closure. https://github.com/google/closure-compiler/wiki/FAQ#closure-compiler-inlined-all-my-strings-which-made-my-code-size-bigger-why-did-it-do-that

Closure Compiler предполагает, что вы используете сжатие gzip. если ты не надо, надо. Конфигурирование сервера для gzip вашего кода - один наиболее эффективных и простых оптимизаций, которые вы можете делать. Алгоритм gzip работает, пытаясь выполнить псевдоним последовательности байтов в оптимальным способом. Сжатие строк вручную почти всегда делает сжатый размер кода больше, потому что он подрывает собственный алгоритм gzip для псевдонимов. Итак, Closure Compiler будет (почти) всегда встраивать ваши если это возможно, потому что это сделает ваш сжатый код меньше.