Решение минимизировать свойства объекта? - PullRequest
13 голосов
/ 21 февраля 2012

В моем приложении JavaScript я использую несколько объектов только для внутренних целей (пользователям не требуется доступ к ним). например:

var images={
    blank:"blank.gif",
    plus:"plus.gif",
    minus:"minus.gif"
}

Когда я использую минификатор, такой как Uglify.js, имена свойств (пусто, плюс, минус) сохраняются как есть. Есть ли способ их минимизировать?

То, что я рассмотрел до сих пор:

  • использовать Google Closure minifier в расширенном режиме, но это сокрушает мой код
  • заменяет свойства объекта переменными (например, var imagesBlank = "blank.gif"), но это делает код менее читабельным

Есть ли лучший способ?

Ответы [ 3 ]

5 голосов
/ 11 июля 2014

Использование объекта позволяет использовать переменные в качестве свойств.Оборачивание в замыкание делает эти переменные достойными минимизации.

//Wrap in closure
(function() {

    //Property Variables
    var blank = 0;
    var plus  = 1;
    var minus = 2;

    //Define Object
    var image = [];
    image[blank] = "blank.gif";
    image[plus]  = "plus.gif";
    image[minus] = "minus.gif";

    //Accessors - must be within closure
    image[blank]; //blank.gif
    image[plus];  //plus.gif
    image[minus]; //minus.gif

})();

Чтобы получить доступ к указанным выше значениям, константы должны использоваться внутри замыкания .

При использованииGoogle Closure Compiler, использующий var image = [];, будет более эффективно декларировать массив, так как значения свойств нумеруются от нуля, то есть 0, 1, 2.

В противном случае, var image = {}; работаетну тоже.

2 голосов
/ 02 июня 2017

Если вы используете уникальный префикс своих внутренних свойств, вы можете попробовать --mangle-props regex за https://github.com/mishoo/UglifyJS2.

Вот его использование в моем файле gulpfile, который требует gulp-uglify.

var uglifyOpts = {
    // Mangles the private "p1_" prefixed properties in an object
    mangleProperties: {
        regex: /^p1_/
    }
};
0 голосов
/ 21 февраля 2012

Ну, в этом случае вы можете просто заменить все ссылки на images.blank на "blank.gif", то же самое на plus и minus.Несмотря на то, что это означает дополнительную работу, если вы по какой-то причине решите изменить все свои имена файлов, нет ничего, что глобальный поиск и замена не могут исправить.Нет необходимости в объекте images.

...