JavaScript компрессоры и зачем они нужны

Минимизируем код и увеличиваем производительность.
11 августа 2017326451Илья Бубнов129145

При создании программы вы должны думать не только о функциональной составляющей, но и о быстродействии. Низкая скорость запуска и работы способна поставить крест даже на самой удачной идее и реализации. Один из путей повышения быстродействия - минимизация кода.

Что такое минимизация

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

Минимизация объёма кода ведёт к уменьшению размера файла, а это значит, что он быстрее будет загружаться и исполняться. В формате небольшой программы выгода ничтожна, но в больших проектах с подключением библиотек, вроде jQuery, это позволит увеличить производительность в разы.

Как это выглядит

Трудно оценить, как это работает, без примера. Вот так выглядит оригинальный код:

    // setup some JSON to use
    var cars = [
     { "make":"Porsche", "model":"911S" },
     { "make":"Mercedes-Benz", "model":"220SE" },
     { "make":"Jaguar","model": "Mark VII" }
    ];

    window.onload = function() {
     // setup the button click
     document.getElementById("theButton").onclick = function() {
       doWork()
     };
    }

    function doWork() {
     // ajax the JSON to the server
     $.post("receiver", cars, function(){

     });
     // stop link reloading the page
     event.preventDefault();
    }

А вот так он выглядит после минимизации:

function doWork(){$.post("receiver",cars,function(){}),event.preventDefault()}var cars=[{make:"Porsche",model:"911S"},{make:"Mercedes-Benz",model:"220SE"},{make:"Jaguar",model:"Mark VII"}];window.onload=function(){document.getElementById("theButton").onclick=function(){doWork()}};

В результате объём кода уменьшился на 39%. При этом компрессии удалось добиться только за счёт сокращения числа пробелов и удаления комментариев, имена переменных были сохранены.

Если распространить этот алгоритм на популярные JS-библиотеки, их объём изменится следующим образом:

  • JQuery: до минимизации 270 KB, после 90 KB.
  • Highcharts: до минимизации 1 MB, после 201 KB.
  • MooTools: до минимизации 164 KB, после 93 KB

Несмотря на различную степень сжатия, выгода очевидна. Минимизация исходного кода сайта позволит пользователю насладиться его работой, а вашему веб-серверу - снизить загруженность.

Как это работает

Теперь, когда вы убедились в эффективности минимизации, давайте рассмотрим, как это делается. Главное правило – не вздумайте делать минимимзацию вручную, это приведёт лишь к появлению ошибок. За вас все сделают специальные инструменты, способные применять различные алгоритмы к вашему коду.

Наиболее популярное решение - онлайн-сервис. Единственное существенное отличие между ними – работа непосредственно с кодом или файлом. В любом случае, весь процесс для вас займёт не более 5 кликов. Вот несколько:

  • JSCompress – простой быстрый сайт. Большой плюс – возможность посмотреть на инструменты, которые использовались для его создания.
  • DansTools JavaScript Minifier – сервис, позволяющий интегрировать его в свой веб-сайт.
  • JavaScript Minifier — здесь нет ничего, кроме компрессора и одной кнопки.
  • Minify — Полная противоположность предыдущему компрессору. Великолепный сайт, заслуживающий внимания.

Количество сервисов огромно, перечислять все бесполезно. Выбирайте тот, что ближе вашему образу мышления и милее глазу.

Другое решение – использование встроенных инструментов в IDE или редакторы. По понятным причинам они намного быстрее, не требуют копипаста и разделения кода на языки и фрагменты.

Так, например, в Microsoft Visual Studio существует расширение Bundler & Minifier. На данный момент его скачало почти 400 тысяч человек. Также оно доступно на GitHub и постоянно развивается.

Поклонникам Sublime Text следует скачать пакет Minify. У него более 61 000 скачиваний и он также доступен на GitHub.

Наконец, для пользователей PyCharm популярным решением является компрессор YUI. В общем, практически любой популярный продукт имеет плагин для минимизации кода.

Обратная сторона медали

В минимизации есть один существенный минус – после нее код нельзя восстановить до исходного состояния. Таким образом, переделать или передать другому разработчику такой код невозможно – с ним физически сложно работать.

Это не самая большая проблема, с который вы можете столкнуться в создании веб-сайтов. Помните о данном ограничении, соблюдая чёткое разграничение между рабочим и производственным кодами. А дальше дело за малым – создать крутой сайт.

Основано на статье Joe Coburn «JavaScript Compressors: How and Why to Minify Your JS».