Обратите внимание, что эта статья не входила в мой запланированный график. Это всплыло, когда я выполнял работу, за которую платят лучше, чем писать здесь, но мне просто нужно было опубликовать это.
В веб-разработке минификация 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 {}, и напортачили с изменением имен переменных, которые не должны быть изменены, например тех, которые используются в литералах объектов как «имя переменной как присвоение».
Но на самом деле, неужели создатели этих систем так стараются найти способы «оптимизации», что они стали МЕНЬШЕ эффективными, чем простое удаление пробелов и комментариев?!?