Обратите внимание, что эта статья не входила в мой запланированный график. Это всплыло, когда я выполнял работу, за которую платят лучше, чем писать здесь, но мне просто нужно было опубликовать это.

В веб-разработке минификация JavaScript — это быстрый, грязный и простой способ увеличить скорость ваших веб-сайтов. Просто удалите ненужные пробелы, скобки, замените несколько имен переменных на отдельные буквы, и полученные файлы меньшего размера могут потреблять половину или меньше пропускной способности и занимать меньше места в кэше пользователя. Кажется, это не составляет труда.

Но мой клиент только что заметил кое-что… странное. Я написал им сценарий меньшего размера, размером 2 тыс.… так как он предназначен для клиента, я не могу им поделиться, но мы получили эти результаты от Google «Closure Compiler Service».

Это сделало файл… больше? Дельта Альфа Фокстрот Униформа Квебека?!?

Он настолько мал, что я бы не стал его минимизировать, но результат странный… Я копаю, и замыкание добавляет всякую сумасшедшую кодировку… поэтому я спросил себя, не удалил ли я просто вручную пробелы из этого 2-килобайтного файла, насколько оно большое?

1,5 КБ/642 байт в сжатом виде.

Я попробовал несколько других минификаторов, большинство из которых, похоже, основаны на чем-то, называемом «терсер», и они давали меньший размер файла, но делали что-то странное. Они удалили внешний {}, используемый для изоляции области видимости, и все константы, объявленные внутри него… так что сценарий был полностью сломан!

Я попробовал это с более крупным сценарием клиента и проделал утомительную процедуру по ручному удалению пробелов и комментариев. Результаты не обнадежили:

File                Size     gZipped
------------------------------------
Original           32.68k     10.44k
Manually Stripped  14.46k      5.07k
"Terser" (broken)  11.21k      3.75k
Closure            17.33k      5.52k

Опять же, общие онлайн-компиляторы, использующие «терсер», удалили константы, многие REQUIRED {}, и напортачили с изменением имен переменных, которые не должны быть изменены, например тех, которые используются в литералах объектов как «имя переменной как присвоение».

Но на самом деле, неужели создатели этих систем так стараются найти способы «оптимизации», что они стали МЕНЬШЕ эффективными, чем простое удаление пробелов и комментариев?!?