Актульнаый релиз „DataLife Engine 19.0 Final“ buildid 109

подробнее о релизе

Объединение CSS файлов на DLE

25 декабря 2025 | 10:12 | Четверг
3
0
[ Рейтинг: 0 / Голосов: 0 ]
Объединение CSS файлов на DLE

Примерно с таким запросом на блог заходят из поисковых систем последние недели и причем по несколько раз в день. Поэтому решил немного написать, в частности, почему в современных реалиях такого делать не стоит…

Для тех кто следит за актуальными релизами DLE должен был заметить такой пункт в релизе DLE 19.0:

41. Из скрипта было убрано сжатие JS и CSS файлов при помощи PHP. Данная функция глобально устарела и использование PHP в актуальных реалиях не эффективно. Для сжатия статических файлов мы рекомендуем включать для этого сжатие файлов серверными средствами, например в Nginx. Это более эффективно, работает быстрее и потребляет намного меньше серверных ресурсов.

Думаете что это сделано просто так? Вот и нет. Данный вариант оптимизации сайта ранее был рекомендован гугл, и при тестировании Google PageSpeed Insights была рекомендация, что для уменьшения запросов к сайту рекомендуется объединять все CSS и JS файлы в один… НО! Эти времена уже прошли, и в 2025 году данный способ оптимизации больше не актуален. Наоборот. Рекомендуется в секцию head разместить CSS файл со стилями, которые отвечают за самый верх сайта для более быстрой генерации сайта, а все остальные стили — можно разместить уже внизу, перед закрывающим тегом body. И на последок немного копипаста на эту тему…

Подход «разделяй и властвуй» для CSS/JS сейчас считается лучшей практикой, и вот основные причины, почему не стоит слепо объединять все файлы в один, а лучше разбивать на модули:

1. Кэширование и обновления
— Проблема объединения: При изменении даже одной строки кода у пользователя инвалидируется кэш всего огромного объединенного файла, и он качается заново целиком.
— Преимущество разделения: Меняется только тот модуль, который был обновлен. Пользователь перекачивает 2-3 КБ вместо 200 КБ.

2. Загрузка по необходимости (Code Splitting)
— Ленивая загрузка: Зачем грузить CSS для админ-панели обычному пользователю? Или JS для страницы оплаты на главной?
— Модульность: Современные сборщики (Webpack, Vite) позволяют динамически подгружать код только когда он нужен.

3. Параллельная загрузка
Современные браузеры могут загружать до 6-8 файлов параллельно с одного домена. Несколько мелких файлов могут загружаться быстрее, чем один большой (особенно с HTTP/2).

4. HTTP/2 и мультиплексирование
— HTTP/1.1: Каждый файл — отдельное соединение (отсюда и совет объединять).
— **HTTP/2+: ** Множество файлов передаются в рамках одного соединения параллельно без оверхеда. Объединение теряет смысл и даже вредит.

5. Разделение ответственности
— Поддержка: Легче найти стили конкретного компонента в `component/button.css`, чем в 5000-строчном `all.css`.
— Работа в команде: Меньше конфликтов в Git, разные разработчики могут работать над разными модулями.

6. Tree Shaking
Современные сборщики могут удалять неиспользуемый код. Если у вас монолитный файл, невозможно определить, какие части действительно нужны для конкретной страницы.

7. Приоритизация загрузки
Вы можете контролировать порядок и приоритет:
<!-- Критический CSS сразу в head -->
<style>/* above-the-fold styles */</style>

<!-- Остальное асинхронно -->
<link rel="preload" href="styles.css" as="style" onload="this.rel='stylesheet'">

Когда объединение всё же нужно:

1. Для старых браузеров без поддержки HTTP/2
2. Очень мелких файлов (если их десятки, иногда лучше объединить)
3. Критического CSS для первой отрисовки (но это отдельная история)

Современный подход:
1. Разделение на компоненты/модули
2. Сборка через Webpack/Vite/Parcel
3. Автоматическая оптимизация:
— Code splitting по страницам/роутам
— Tree shaking
— Ленивая загрузка
— Preload/Prefetch для критических ресурсов

Итог: Не объединяйте вручную. Используйте современные сборщики, которые сделают интеллектуальное разделение и объединение там, где это действительно нужно для производительности.

Вывод: не нужно объединять абсолютно все файлы в один без раздумий, не зря в последнем актуальном релизе DLE 19.0 был удалён скрипт минификатора и объединения всех файлов по типу в один.

PS кстати, аналогично данной теме и не рекомендуется больше минимизировать весь HTML код страницы, т. к. это на современных устройствах усложняет генерацию страницы, но это уже другая тема…

Комментарии:
ℹ️
 
Модули для создания киносайта и не только на базе DataLife Engine, и многое другое...
Просто блог Евгения Попова, он же - byroot © 2015-2025 | Карта сайта