2012-02-21 7 views
9

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

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

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

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

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

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

+3

* использовать Google Closure minifier в расширенном режиме, но это подавляет мой код * ... вы должны внимательно прочитать документацию и настроить свой код, чтобы он не разбился. Я думаю, что компилятор Google Closure - лучший вариант. –

+0

@FelixKling у вас есть конкретные ссылки, связанные с моим вопросом? Кроме того, не стесняйтесь публиковать их в качестве ответа, чтобы я мог принять его! – Christophe

+0

Нет, не совсем ... только документация (http://code.google.com/closure/compiler/docs/api-tutorial3.html). –

ответ

-3

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

+0

Это был просто пример. В моем коде ссылка на изображение на самом деле длиннее: «http: //domainName/hierarchy/blank.gif». Повторение строки не затрагивает проблему минимизации. Я мог бы хранить его в переменной, но потом мы вернулись к моему вопросу. – Christophe

+0

Ну, у вас может быть переменная 'baseimgurl =" http: // example.com/hierarchy/";' и просто добавьте это к вашим ссылкам на изображение ... Возможно. –

4

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

//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 = {}; также хорошо работает.

0

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

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

var uglifyOpts = { 
    // Mangles the private "p1_" prefixed properties in an object 
    mangleProperties: { 
     regex: /^p1_/ 
    } 
}; 
Смежные вопросы