@volyihin
Разработчик

Нужно ли минифицировать JS/CSS на начальном этапе проекта?

Нужно ли заморачиваться изначально на минификацию кода? Есть ли аргументы за и против?
  • Вопрос задан
  • 892 просмотра
Пригласить эксперта
Ответы на вопрос 5
@Rabinzon
На продакшн все идет в сжатом виде(от этого зависит скорость загрузки стр ).
Если вы делаете это руками, то юзайте сборщик проектов (Gulp, webpack и т.д).
Ответ написан
Комментировать
litlleidiot
@litlleidiot
Фронт-Энд разработчик
Я сразу от начала до конца минифицирую и сжимаю все что только можно. (а на кой хрен мне что либо не сжимать если потом все равно на прод отдаю .min)
Ответ написан
copist
@copist
Empower people to give
Если бы это был ваш проект? Если бы вы решали нужна ли минификация?

Я бы скопировал конфиг с другого своего проекта, который уже предусматривает сжатие ;)
Наверное, где-то на самых ранних стадиях своего проекта минификация была бы выключена даже на проде, но в итоге получились бы файлы размером по 2 мегабайта. Страницы бы загружались медленно, потому что приходилось бы пересылать большие JS и CSS. А вот сжатые версии JS и CSS не только загружаются быстрее, но и исполняются тоже быстрее, потому что там меньше строк и в браузере скрипты меньшего размера интерпретируются быстрее.

А ещё миницикация подразумевает обфускацию. Это не только запутывает код, но и делает его компактнее за счёт использования очень коротких имён переменных (a, b, c). Сжатый код JS становится такой кашей, что фиг разберёшь обратно. Хотя есть де-обфускаторы - могут хотя бы частично восстановить код.

Есть у такого метода побочные эффекты.

Пример:
При использовании ангуляра можно встретить такие конструкции

angular
    .module('app')
        .controller('MainController', function($scope, service1, service2, service3) { // <-- тут перечисляются сервисы, которые нужны внутри функции
            $scope.prop = service1.getSomeData();
            // ... 
        });


При сжатии кода это выражение превратится в
angular
    .module('app')
        .controller('MainController', function($s, a, b, c) { // <-- минификатор сжал названия параметров
            $s.prop = a.getSomeData();
            // ... 
        });


Учитывая то, что angular будет сам пытаться по именам переменных (service1, service2, service3, a, b, c) определить сервисы, появится ошибка, что сервисы "a", "b", "c" не найдены

Такое можно выявить при сжатии кода JS. Конечно, опытные программисты пишут код в другой нотации, чтобы предотвратить подобные ошибки, но вдруг один из 10 модулей проекта будет написан новичком и всё приложение порушится?

Минификация нужна чтобы проверить работу приложения с сжатым и обфусцированным кодом. Обфускацию можно выключить в настройках минификаторов.

Минификация может занимать до нескольких минут работы - не каждый захочет терпеть столько времени на ожидание. Поэтому переносят эту операцию на сервер сборки и тестирования, а во время разработки пользуются несжатыми версиями.
Ответ написан
Комментировать
xPomaHx
@xPomaHx
1vs9
Сжатие всего кода это 100мс в галпе, почему бы не сжимать сразу.
Ответ написан
Комментировать
@volyihin Автор вопроса
Разработчик
Прагматичный подход - сжимать, когда это действительно нужно. Когда вы видите выгоду от этого для конечного пользователя. Нет выгоды - сжимать не нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы