Comments 31
Супер! Я для собственных модулей подобные оптимизации проделываю. Т.е. this помещаю в self, лишь для того, чтобы uglifyjs мог эту переменную потом утоптать. При таком подходе код не теряет читаемость, но хорошо жмется. Общие функции забрасываю в области замыкания для того-же.
Важен размер именно zip-файла.
this.this.this.this.
var s=this;s.s.s.s.
В таком случае первый вариант явно лучше, как и использование повторяющихся каких угодно огромных кусков кода. Баловство с вырезанием общей шапки картинки тоже пользы не должно было принести, кроме лишнего текста функции ничего оно не даст. Было бы здорово если бы вы сравнили текст без всей этой лишней ерунды и тот что получился. Сжатые версии естественно
размер zip-архива с этим файлом не должен превышать 13 килобайт;
Как ни смешно, но большая часть этих оптимизаций для сжатия оказалась излишней: даже с оригинальными именами глобальных переменных файл с игрой превратился в zip-архив размером 10.1 Кб (при размере index.html в 31.9 Кб).
Такими оптимизациями влегкую можно подкузьмить архиватору и вызвать увеличение размера архива.
А зачем вам вообще this
? Просто ModuleName_setSomeProp(itemObj, '..value..')
и так далее, жаться будет на ура, читаемость отличная, даже работать будет быстрей.
Да, я тоже думаю, что без архиватора, чистым текстом, было бы интереснее. Но — таковы правила, ничего не попишешь. Пробовал через packer, он сжимает до ~21 Кб, но с ошибками. Разбираться было некогда, да и есть опасения, что с такими наворотами может начать тормозить.
Видимо организаторы исходят из того что практически все серверы и броузеры поддерживают дефлейт. А вот на мой взгляд спортивнее было бы если бы после загрузки и парсинга код отъедал не более 13 кбайт в оперативке /pokerface Дом и сам движок не считаем.
this
на s
сломала логику — вторая строка будет эквивалентна this.s.s.s
а не this.this.this.this
.Уверен, что автор это понимает и в продакшен-коде подобной ошибки бы не допустил, но все же пример стоит сделать более наглядным.
Первый кусок кода — только для сравнения длин строк. Это вообще не рассматривается как рабочий код. Смысл в том, чтобы наглядно показать, сколько символов будут занимать четыре обращения к this
и четыре обращения к переменной.
this.x=0;this.y=1;this.w=2;this.h=3;
var s=this;s.x=0;s.y=1;s.w=2;s.h=3;
Вариант с переменной короче на один символ при четырёх обращениях к объекту. Каждое следующее обращение будет экономить ещё по три символа.
Да, очень красивая игра. Но мой фаворит — Super Chrono Portal Maker.
Например, в одном из конструкторов было 39 штук this. Заменив их на self, получилось сэкономить более 100 байт.
Но как?
В комментарии выше есть пример; self
при минификации кода становится односимвольной переменной.
В процессе минификации self
превратится в s
. То есть, полная цепочка будет выглядеть так:
this.x = 0; this.y = 1; this.w = 2; this.h = 3; // код с this
var self = this; self.x = 0; self.y = 1; self.w = 2; self.h = 3; // this заменили на self
var s=this;s.x=0;s.y=1;s.w=2;s.h=3; // при минификации self стал одним символом
Возможно, организаторы решили, что 13 Кб исходников — слишком мало для интересных игр. А было бы намного интереснее. Вон, люди пишут замечательные демки на JS в пределах 1 Кб.
https://habrahabr.ru/post/102153/
Как выжать максимум из минификации кода