4

Основные компрессоры и мини-компрессоры JavaScript не имеют имен объектов. (Google Closure, YUI ...)Сжатие Javascript и проблема с свойствами объекта

Я заметил, что в результате получается большая разница в размере (gzipped и не gzipped) в зависимости от того, какой путь или шаблон мы решили выбрать для нашего скрипта.

В качестве примера, выбор шаблона прототипа для нашего проекта, скорее всего, приведет к созданию больших результирующих файлов (несжатых, сжатых и gzipped).

Вот небольшое сравнение с двумя частями кода делает точно то же самое:

Сжатый с использованием Google Closure compiler.

В результате совершенно очевидно, просто глядя на полученный сжатый код:


Прототип картины


вар MyBluePrint = функция() {this.name = "демо" ; this.someFunction = function() {alert ("some function")}; this.someOtherFunction = function() {alert ("some other function")}; this.showMyName = function() {alert (this.name) }; this.someFunction(); this.someOtherFunction(); this.showMyName()}; new MyBluePrint;


Без рисунка


вар MyBluePrint = функция() {Alert ("некоторые функции"), предупреждение ("некоторые другие функции"), предупреждение ("демо")}; новый MyBluePrint;



Все, используя свойство объекта не будет сжато. Такие как:

//function declarations 
this.someFunction = function(){ ... } 

//objects 
var demo = { 
    isActive: 'aaaa'. 
    name: 'aaaa' 
} 

Должны ли мы действительно думать об этом при создании наших проектов? Это было бы не в первый раз, когда вместо того, чтобы иметь объект, полный свойств, я решил использовать обычные переменные только для того, чтобы использовать много имен свойств long.

+1

Зависит от потенциальной экономии и, следовательно, размера вашего кода для минимизации. Насколько велика будет конечная экономия? – tucuxi

+0

Ваши ссылки JSFiddle идентичны. Оба они выглядят как метод без шаблонов. –

+0

@ChadKillingsworth извините за это. Обновленная ссылка. – Alvaro

ответ

2

Имена свойств полностью переименовываются с помощью Closure-Compiler с использованием ADVANCED_OPTIMIZATIONS. Кроме того, чтобы получить полную мощность компилятора Closure, вам нужно сообщить компилятору, что MyBluePrint является конструктором с использованием аннотации @constructor. Кроме того, то, что вы называете «образцом прототипа», фактически использует методы экземпляра, а не прототипы.

Вот обновляемые сравнения:

Закрытие компилятора может полностью встроенные методы во многих случаях делая различия в размерах выходных данных почти незначительными. Если вы можете использовать Closure-компилятор с ADVANCED_OPTIMIZATIONS, вы должны выбрать шаблон кода, который обеспечивает наилучшую ремонтопригодность и позволить компилятору обрабатывать оптимизацию.

Однако все эти сравнения в основном бессмысленны. Чтобы иметь фактические сравнения сжатия GZIP, вам нужна большая база кода. Небольшие фрагменты кода не предоставляют точных представлений.

Смежные вопросы