Метод CoffeeScript также имеет преимущества для минимизации.
С мой другой ответ :
Для большинства разумных классов замыкание, генерируемое CoffeeScript, генерирует меньший минимизированный вывод.
Закрывающая оболочка составляет 25 байтов минимизированных служебных данных, но она избавляет вас от повторения имени класса , сохраняя k * N
байтов (k = букв в имени, N = num-of -refs).
например, если класс, подобный BoilerPlateThingyFactory
, имеет 2+ метода, оболочка замыкания генерирует меньший минимизированный код.
подробнее ...
Код, сгенерированный Coffee с использованием замыкания, уменьшается до:
// Uglify '1.js' = 138 bytes (197 w/ whitespace):
var Animal=function(){function e(e){this.name=e}return e.prototype.speak=function(e){return"My name is "+this.name+" and I like "+e},e}();
// with whitespace ("uglifyjs -b"):
var Animal = function() {
function e(e) {
this.name = e;
}
return e.prototype.speak = function(e) {
return "My name is " + this.name + " and I like " + e;
}, e;
}();
Альтернативная «идиоматическая» реализация Ryeguy сводится к следующему:
// Uglify '2.js' = 119 bytes (150 w/ whitespace):
var Animal=function(t){this.name=t};Animal.prototype.speak=function(e){return"My name is "+this.name+" and I like "+e};
// with whitespace ("uglifyjs -b"):
var Animal = function(t) {
this.name = t;
};
Animal.prototype.speak = function(e) {
return "My name is " + this.name + " and I like " + e;
};
Обратите внимание, что имя «Животное» существует только один раз в форме «Кофе» и N = 2 раза в «идиоматической» переменной Ригью. Теперь «Животное» состоит всего из 6 букв, и есть только 1 метод, поэтому кофе здесь должен проигрывать на 25-6 = 19 байт. Сверяясь с моим минимизированным кодом, это 138 байтов до 119 байтов, для дельты ... 19 байтов. Добавьте еще 4 метода, и преимущество переключится на Кофе. И это не просто методы; константы классов и другие типы ссылок тоже учитываются.