Как стать автором
Обновить

YUICompressor — улучшаем сжатие

Время на прочтение 2 мин
Количество просмотров 2.4K
Немного прооптимизировав код своей библиотеки, я вдруг заметил что она стала на порядок хуже сжиматься. Для сжатия использую YUICompressor. Твердая уверенность в том что оптимизация все же должна пойти на благо, а не во вред, я решил разобраться в чем же дело. И вот что оказывается: YUICompressor плохо переваривает window.eval внутри (function(){...})(). Теперь пример плохой сжимаемости:

(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 о даной баге, ждем исправления.
Теги:
Хабы:
+8
Комментарии 13
Комментарии Комментарии 13

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн