Сжатие Javascript и проблема свойств объекта

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

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

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

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

Сжатый с помощью компилятора Google Closure.

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


Образец прототипа


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


Без рисунка


var MyBluePrint=function(){alert("некоторая функция");alert("некоторая другая функция");alert("demo")};new MyBluePrint;



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

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

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам