Задать вопрос
@JunDevTest
Контакты: thejundev@gmail.com | @juniordev

Стоит ли минифицировать и склеивать файлы, если есть http2 и gzip?

Приветствую вас.
Вот недавно занялся поиском утилиты или скрипта для слеивания и минификации CSS и JS файлов и задумался над целесообразностью сего действа в наше время, когда есть GZIP и HTTP2. Кроме того, действительно ли такая оптимизация в наше время важна? Если да, то посоветуйте нормальные, не "смузи-хипсторские" решения, которые не требуют отдельного сервера с целым зоопарком технологий в придачу?
  • Вопрос задан
  • 893 просмотра
Подписаться 5 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 6
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Стоит ли минифицировать и склеивать файлы, если есть http2 и gzip?
GZIP тут играет довольно малую роль, к тому же, он был (и есть) и в HTTP1.0/1.1. К минификации он тоже никак напрямую не относится, от слова совсем. Минифицированные файлы становятся меньше с GZIP'ом, в сравнении с неминифицированным, сжатые тем же GZIP'ом (при прочих равных условиях).

Кроме того, действительно ли такая оптимизация в наше время важна?
Это риторический вопрос. Что-то из области: "Действительно ли так важен мизинец на ноге, или можно его отрезать?"

Если да, то посоветуйте нормальные, не "смузи-хипсторские" решения, которые не требуют отдельного сервера с целым зоопарком технологий в придачу?
Единственная известная мне технология, которая требует какого сревера - это модуль "Google PageSpeed", который подключается к Apache'у или "вкомпилировывается" в Nginx. При этом, отдельного сервера он не требует, достаточно того, что установлен в 95% случаев (Nginx и/или Apache). Но, Вы приспокойно можете минифицировать и сжимать файлы и без него, используя для этого массу готовых решений которые не требуют вообще никакого сервера и работают обычно локально, например решения на базе NodeJS (gulp) - модулей просто тонны, но если хотите, могу поискать за Вас. А так же, есть масса онлайн-сервисов занимающихся тем же самым, которые так же, не требуют наличия чего либо, кроме разве что браузера.

P.S. Gulp (и прочие подобные ему инструменты) умеют так же и склеивать JS и "сжимать" картинки и минифицировать CSS и проводить массу действий подобного характера, в зависимости от Ваших потребностей. "Настроить" достаточно 1 раз, потом можно использовать готовую болванку в неограниченном кол-ве проектов.
Ответ написан
Moskus
@Moskus
Как всегда, вопросы на эту тему недоформулированы или содержат термины, которые не определены.
Если под минификацией JS подразумевать самую простую ее форму, то есть удаление пробелов и комментариев (которых у вас в коде может и не быть), эффект от такой минификации после сжатия gzip стремится к нулю, потому что архивация данных устраняет избыточность, пусть и не полностью. Многие решения, которые работают в виде онлайн-сервиса с формой, куда надо вставлять код, занимаются именно такой имитацией минификации.

Если под минификацией JS подразумевать использование более совершенных методов (например, то, что умеет https://github.com/mishoo/UglifyJS2 ), таких, как переименование функций и переменных, удаление из кода готовых библиотек тех функций, которые не вызываются, и так далее - это может давать существенный эффект.

То же касается CSS.

Что касается супер-медленных каналов и так далее - люди, которые пользуются такими каналами, действительно существуют, но они на порядки более редки, чем люди, которые пользуются слабым и устаревшим железом. Потому, при ограниченных ресурсах на разработку (банально - ограниченном времени) больше внимания стоит уделять тому, чтобы сайт не был излишне требователен к ресурсам клиентского устройства (бесполезные фоновые видео, гигантские картинки, тормозная JS-анимация, бесконечный скролл, куча разных веб-шрифтов, страницы-простыни вместо многостраничной навигации, прочие модные ресурсоёмкие приемы верстки).
Ответ написан
Комментировать
batyrmastyr
@batyrmastyr
В плане сжатия js, в первую очередь нужно ускорять разбор и выполнение кода т.к., условно, 10 кб js могут быть хуже пары мегабайт картинок (https://medium.com/dev-channel/the-cost-of-javascr... ). В общем, Moskus прав - удаление пробелов и комментариев из кода мало что даёт, а удаление ненужного кода + переименование функций и переменных заметно уменьшает размер файла.
Но будьте осторожны: если минификатор идёт дальше и прикидывается архиватором (например, Packer от Dean Edwards's или webpack с его тысячами eval'ов !function(F,Q){for(var B in Q)F[B]=Q[B]}(global,webpackJsonp([0], {"use strict";eval("var __WEBPACK_AM), то вы не ускорите работу, а наоборот добавите тормозов на клиенте.
Ответ написан
Комментировать
bingo347
@bingo347
Crazy on performance...
добавлю к вышесказанному про http/2:
без "умных" server-push бандл содержащий весь код сайта для каждой страницы будет грузится быстрее отдельных модулей, даже если Вы грузите их далеко не все.
просто представьте, вы грузите html -> он обрабатывается -> начинает грузить стили, картинки и главный модуль js -> js обрабатывается -> грузит еще 5 модулей, которые после обработки грузят еще 50 модулей
а теперь просто подумайте - у Вас сотня файлов, которые грузятся параллельно в одном tcp потоке, к тому же обернутом в tls - что добавляет. оверхед на шифрование и дешифровку + добавим сюда оверхед на парсинг js, который будет задерживать сеть, а сеть его

выхода из этого 2
- или по прежнему отдавать все одним бандлом
- или настраивать push, но с этим тоже траблы, ибо помимо вычисления файлов нужных начальному запросу (хоть и сложно, но вполне реально), нужно предсказывать, а что у браузера уже в кэше (ошибемся - получим или начальный оверхед (не отдали нужное) или сожрем лишний трафик (отдали ненужное))
Ответ написан
Комментировать
profesor08
@profesor08
babel + uglifyjs = нормальный минифицированный код, который работает в большинстве браузеров. Так-же опционально можно добавить полифиллы.
Ответ написан
Комментировать
lukoie
@lukoie
CodeKit поглядите. Он делает всё сам и шустро, и не требует кучи всего вдовесок.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы