Немного прооптимизировав код своей библиотеки, я вдруг заметил что она стала на порядок хуже сжиматься. Для сжатия использую YUICompressor. Твердая уверенность в том что оптимизация все же должна пойти на благо, а не во вред, я решил разобраться в чем же дело. И вот что оказывается: YUICompressor плохо переваривает window.eval внутри (function(){...})(). Теперь пример плохой сжимаемости:
после сжатия
как видим переменные TOPLONGNAME и LOCALLONGNAME не прооптимизированы.
Как это победить? Очень просто! Замените window.eval на window['eval'].
Пример:
После сжатия:
Может кому пригодится… В любом случае, я отписал разработчику YUICompressor о даной баге, ждем исправления.
(function(){
var TOPLONGNAME = 'a';
var obj = {
test: function(){
var LOCALLONGNAME = 'b';
var res = window.eval(function(){
alert(TOPLONGNAME + LOCALLONGNAME);
});
res();
}
}
obj.test();
})()
после сжатия
(function(){var TOPLONGNAME=«a»;var obj={test:function(){var LOCALLONGNAME=«b»;var res=window.eval(function(){alert(TOPLONGNAME+LOCALLONGNAME)});res()}};obj.test()})();
как видим переменные TOPLONGNAME и LOCALLONGNAME не прооптимизированы.
Как это победить? Очень просто! Замените window.eval на window['eval'].
Пример:
(function(){
var TOPLONGNAME = 'a';
var obj = {
test: function(){
var LOCALLONGNAME = 'b';
var res = window['eval'](function(){
alert(TOPLONGNAME + LOCALLONGNAME);
});
res();
}
}
obj.test();
})()
После сжатия:
(function(){var A=«a»;var B={test:function(){var D=«b»;var C=window[«eval»](function(){alert(A+D)});C()}};B.test()})();
Может кому пригодится… В любом случае, я отписал разработчику YUICompressor о даной баге, ждем исправления.