Сжатие Javascript и проблема свойств объекта
Основные компрессоры и минификаторы JavaScript не работают с именами свойств объектов. (Google Closure, YUI...)
Я заметил, что есть большая разница в конечном размере (gzipped и not gzipped) в зависимости от того, какой путь или шаблон мы решим выбрать для нашего сценария.
Например, выбор шаблона-прототипа для нашего проекта, скорее всего, приведет к созданию больших файлов (несжатых, сжатых и сжатых).
Вот небольшое сравнение с двумя частями кода, делающими точно так же:
- Шаблон прототипа 138 байт в сжатом виде (286 байт без сжатия)
- Без шаблона 87 байт в сжатом виде (110 байт без сжатия)
Сжатый с помощью компилятора 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
аннотаций. Кроме того, то, что вы называете "шаблоном прототипа", фактически использует методы экземпляра, а не прототипы.
Вот обновленные сравнения:
- Методы экземпляра - сжатые 104 байта
- Частное закрытие - 79 байтов в сжатом виде
- Методы-прототипы - 81 байт в сжатом виде
Закрывающий компилятор может полностью встроить методы во многих случаях, делая различия в размере вывода практически незначительными. Если вы можете использовать Closure-компилятор с ADVANCED_OPTIMIZATIONS
Вы должны выбрать шаблон кода, который обеспечивает лучшую поддержку и позволить компилятору обрабатывать оптимизации.
Однако все эти сравнения в основном бессмысленны. Чтобы иметь фактические сравнения сжатия GZIP, вам нужна большая база кода. Небольшие фрагменты кода не обеспечивают точного представления.