3.13. Эталонное решение: оптимизация проекта под протокол HTTP/2

Наши предложения по оптимизации проекта под протокол HTTP/2.

CSS

Разделим на файлы:

  • common.min.css — для повторяющихся стилей: стилей шапки и футера, подключения шрифтов, других универсальных стилей;
  • index.min.css — для стилей главной страницы;
  • catalog.min.css — для стилей страницы каталога;
  • product.min.css — для стилей страницы товара;
  • modal.min.css — для стилей модального окна.

Подключим на страницы только те стили, которые на них нужны. Посмотрим:

index.html:

<link rel="stylesheet" href="css/common.min.css">
<link rel="stylesheet" href="css/index.min.css">
<link rel="stylesheet" href="css/modal.min.css">

catalog.html:

<link rel="stylesheet" href="css/common.min.css">
<link rel="stylesheet" href="css/catalog.min.css">

product.html:

<link rel="stylesheet" href="css/common.min.css">
<link rel="stylesheet" href="css/product.min.css">

JavaScript

Разделим на файлы:

  • common.min.js — для повторяющихся скриптов, например, открытия и закрытия меню в мобильной версии;
  • add-to-cart.min.js — скрипт добавления товара в корзину;
  • add-to-favourite.min.js — скрипт добавления товара в избранное;
  • product-carousel.min.js — скрипт для карусели фотографий товара на странице товара;
  • filter.min.js — скрипт для фильтрации на странице каталога;
  • modal.min.js — скрипт открытия модального окна.

Подключим на страницы только те скрипты, которые нужны на них нужны. Например:

index.html:

<script src="js/common.min.js"></script>
<script src="js/modal.min.js"></script>

catalog.html:

<script src="js/common.min.js"></script>
<script src="js/add-to-cart.min.js"></script>
<script src="js/add-to-favourite.min.js"></script>
<script src="js/filter.min.js"></script>

product.html:

<script src="js/common.min.js"></script>
<script src="js/add-to-cart.min.js"></script>
<script src="js/add-to-favourite.min.js"></script>
<script src="js/product-carousel.min.js"></script>

Графика

Разбираем спрайт на иконки и подключаем иконки.

Было:

<!-- Подключение иконки через спрайт -->
<p class="route__address">
  <svg class="route__icon" width="14" height="22"><use xlink:href="sprite.svg#icon-contacts-location"></use></svg>
  ул. Большая Конюшенная, 19/8
</p>

Стало:

<!-- Подключение иконки без спрайта -->
<p class="route__address">
  <svg class="route__icon" width="14" height="22"><use xlink:href="icon-contacts-location.svg"></use></svg>
  ул. Большая Конюшенная, 19/8
</p>

Можно оставить спрайт иконок, используемых на всех страницах: иконок соцсетей, открытия и закрытия мобильного меню. Также можно оставить спрайт иконок, используемых на определённой странице, например, спрайт всех иконок страницы товаров. Главное — не загружать на страницах неиспользуемые иконки.