27.06.2022
Быстрый сайт — это как?
Быстрый сайт — это когда содержание сайта показывается так быстро, что пользователь не успевает забыть о цели своего визита.
😬Осторожно, много технических подробностей!
Для этого нужно, чтобы:
- Сервер ответил на запрос пользователя за 20 мс.
- Ещё 60 мс на скачивание html и css сайта.
- Ещё 90 мс на загрузку картинок.
- И ещё 30 мс на загрузку и выполнение скриптов.
Если сайт загружается за 200 мс, то пользовательский опыт (User Experience) будет определяться исключительно содержанием сайта. А если сайт загружается дольше 3 секунд, то 53% пользователей просто покинут его, согласно исседованию Google, проведённому в 2017 году. И хотя это не самое новое исследования, нет никаких оснований думать, что в 2022 году пользователи будут ждать дольше, чем в 2017.
13 технических фишек, которые ускорят сайт
- Тонкая настройка сервера. Если после старта сайта исходный код не меняется, то на nodejs можно отключить обращение к жёсткому диску при каждом динамическом import`е.
- Использовать преимущества протокола HTTP/2. Мультиплексирование позволяет отказаться от общих bundle`ов из стилей и скриптов. У каждой страницы только свои стили и скрипты.
- HTTP/2 Server Push — всё, что может блокировать загрузку страницы, должно быть отдано сервером вместе с первым запросом.
- Использование технологий AJAX и SSR в купе с концепцией 2000-х годов “Тонкий клиент”.
- Использование HTTP кэша public, при сохранении лазейки для сброса кэша после обновлений сайта с технологией Service Worker или с добавлением версий в адреса файлов.
- Современные форматы изображений WebP, AVIF, JPX, а лучше SVG. Для видео WebM.
- Загрузка картинок после попадания их в поле зрения с атрибутом loading lazy. В галереях с больши количеством иллюстраций, до взаимодейтсвия, загружать только одну или две картинки, а для остальных использовать атрибут data-src.
- Отложенная загрузка некоторого css с помощью preload и onload.
- Media Queries для показа иллюстраций разных размеров, в зависимости от размера экрана на устройстве пользователя.
- Чистый модульный код HTML, CSS, нативный Javascript. Никаких лишних библиотек.
- ES6 и нативные шаблонные строки. Literal Templates позволяют отказаться от внешнего шаблонизатора. А nodejs позволяет использовать один Literal Template - шаблон на клиенте и сервере.
- Сначал запускаем посетителя на сайт, а потом его считаем, никак не наоборот. Системы статистики ставят точность подсчёта во главу угла и, буквально, не пускают посетителя на сайт пока его не посчитают — конечно же это не дело, счётчики должны быть после контента.
- Ответ сервера должен архивироваться gzip или brotli.
Ну и если всё сделано хорошо, то тест Google Speed будет в зелёной зоне.