Привет! Меня зовут Руслан, и я работаю React-разработчиком в компании SimbirSoft. На одном из моих проектов я столкнулся с проблемой низкой производительности сайта, которую нужно было решить быстро и с минимальными затратами ресурсов. В этой статье я хочу рассказать о том, почему важна производительность сайта и зачем её нужно улучшать, а также поделиться несколькими способами увеличения скорости загрузки веб-страниц.

Основные метрики Core Web Vitals и их влияние на пользовательский опыт

Согласно документации Google, скорость загрузки напрямую влияет на ранжирование страниц в поиске. Помимо этого, скорость загрузки также существенно влияет на конверсию. Исследования все тех же Google показывают, что вероятность ухода пользователя без целевого действия при времени загрузки более 1-3 секунд возрастает на 32%, а при времени более 10 секунд — на 123%.

Метрики оптимизации страницы: до и после
Метрики оптимизации страницы: до и после

Другое исследование показывает, что уменьшение времени загрузки на 0,1 секунду может улучшить конверсию до 10%.

Увеличение конверсии после оптимизации
Увеличение конверсии после оптимизации

В 2021 году Google представила новый набор факторов Core Web Vitals, направленных на оценку качества пользовательского опыта. В эту группу входят три параметра:

  • LCP: время рендеринга основных или наибольших элементов (текст, картинка, видео). Для обеспечения наилучшего пользовательского опыта сайты должны стремиться к тому, чтобы время отрисовки контента не превышало 2,5 секунды.

    Время рендеринга основных или наибольших элементов
    Время рендеринга основных или наибольших элементов
  • INP: оценка отзывчивости страницы на взаимодействие с пользователем. Этот показатель заменил FID (First Input Delay), который учитывал только задержку первого ввода и не был полностью объективной метрикой. Конечным значением данной метрики будет самое продолжительное наблюдаемое взаимодействие с пользователем. Задержка не должна превышать 200 мс.

    Оценка отзывчивости страницы на взаимодействие с пользователем
    Оценка отзывчивости страницы на взаимодействие с пользователем
  • CLS: оценка устойчивости верстки и элементов во время рендеринга. Оптимальным является значение, не превышающее 0,1. Подробнее о методе расчета можно прочитать здесь.

    Оценка устойчивости верстки и элементов во время рендеринга
    Оценка устойчивости верстки и элементов во время рендеринга

Таким образом, мы выяснили, что скорость работы сайта оказывает существенное влияние на ранжирование и конверсию, а также разобрались в методах оценки. Поэтому возникает вопрос: как же можно улучшить эту скорость?

Основные способы ускорения работы сайта

1. CDN

Одним из самых повсеместных способов ускорения работы веб-приложений является внедрение CDN. CDN — это сеть серверов, распределённых по разным географическим регионам, которая обеспечивает ускоренную доставку контента пользователям веб-сайтов и онлайн-сервисов. Серверы CDN strategically размещаются таким образом, чтобы минимизировать задержку и сократить время отклика для посетителей, обеспечивая более быстрый и стабильный доступ к ресурсам.

Работа без CDN
Работа без CDN

Проще всего описать работу CDN следующим образом: представим веб-сервис, которым пользуются миллионы людей по всему миру. Основные сервера расположены в США, поэтому здесь пользователи могут рассчитывать на минимальную задержку при запросах к серверу. Но как же быть людям, находящимся за тысячу километров? Тут на помощь приходит CDN, представляющий собой сотни кэширующих серверов по всему миру. Таким образом, пользователи будут переадресовываться к географически ближайшему серверу в составе CDN. Такие сервера называются кэширующими, потому что после запроса к главному серверу, все данные кэшируются на ближайшем сервере.

Работа с CDN
Работа с CDN

Также стоит уделить внимание следующей проблеме: представим, у нас есть один главный сервер в Бразилии и два кэширующих во Владивостоке и Казани. При запросе пользователя из Владивостока все данные будет закэшированы на ближайшем сервере для того, чтобы обеспечить минимальную задержку при запросе пользователя из Казани, так как существует технология регионального извлечения. Суть данной технологии состоит в том, чтобы соседние серверы, входящие в состав CDN, забирали контент друг у друга, а не обращались к оригинальному серверу.

2. Сжатие файлов

Сжатие файлов является одним из наиболее эффективных способов уменьшения времени их загрузки. Чем меньше размер файлов, тем быстрее они будут доставляться пользователю. Одним из популярных методов сжатия является использование GZIP, что стало стандартной практикой в современной веб-разработке.

GZIP — это файловый формат и утилита для сжатия, которая уменьшает размер текстовых файлов, находя повторяющиеся строки кода и заменяет их ссылками. Такой подход позволяет значительно сократить объём файлов. Большинство современных веб-серверов активно используют сжатие в данном формате, применяя встроенные средства или сторонние модули, чтобы ускорить передачу данных и повысить эффективность взаимодействия с клиентом.

Как работает GZIP
Как работает GZIP

Применение Gzip способствует не только ускорению загрузки веб-страниц, но и снижению нагрузки на сеть, что актуально для ресурсов с высокой посещаемостью. Внедрение этой технологии требует минимальных затрат времени и усилий, при этом заметно улучшая пользовательский опыт, делая сайт быстрее и более отзывчивым.

3. Lazy Loading

Еще одним популярным способом уменьшения времени загрузки веб-страниц является использование ленивой загрузки (lazy loading). Эта техника позволяет отложить загрузку медиаконтента, который не является необходимым в данный момент.

Как работает lazy loading
Как работает lazy loading

Рассмотрим пример: у вас есть большая новостная лента, где каждый пост содержит изображение или видео. Обычный способ вставки такого контента может выглядеть так:

<img src="big-image.jpg" width="1024" height="768" alt="Картинка">

Браузер загрузит это изображение сразу после открытия страницы, что может привести к значительным проблемам с производительностью. Для решения этой проблемы был введен атрибут loading="lazy", который позволяет подгружать контент динамически, только когда пользователь достигает соответствующей части страницы.

Ленивая загрузка помогает повысить производительность веб-сайта, снижая нагрузку на сервер и сеть, а также ускоряя загрузку страниц для пользователей. Эта технология особенно полезна для сайтов с большим объёмом медиаконтента, например, новостных порталов или блогов, где нужно эффективно управлять загрузкой изображений и видео, загружаемых по мере прокрутки страницы.

4. Кэширование

Кэширование — это высокоскоростной уровень хранения данных, предназначенный для размещения часто используемой информации, обычно временного характера. Оно позволяет значительно ускорить доступ к данным по сравнению с основным хранилищем. Этот процесс обеспечивает повторное использование ранее извлечённой или вычисленной информации. В качестве объектов кэширования могут выступать результаты запросов к базам данных, ресурсоёмкие вычисления, ответы API-запросов, а также веб-ресурсы.

Таблица решений
Таблица решений

5. SSR

SSR — это метод, при котором веб-страница создаётся на сервере, а не в браузере пользователя. Вместо того чтобы пользователь наблюдал пустую страницу во время загрузки веб-приложения, сервер отправляет уже сгенерированный HTML, ускоряя отображение содержимого. Это позволяет пользователю сразу увидеть страницу и работать с ней, пока приложение завершает загрузку и инициализацию. Такой подход исключает дополнительные запросы данных с клиента и обеспечивает быструю первую содержательную отрисовку.

SSR является одним из двух методов визуализации веб-страниц. Ввиду его ограничений, которые мы рассмотрим далее, иногда целесообразнее использование другого способа.

CSR — это подход к веб-разработке, при котором рендеринг (отображение) веб-страниц происходит на стороне клиента, то есть в браузере пользователя. В этом случае сервер отправляет клиенту минимальный HTML-код, а затем JavaScript берет на себя задачу динамического построения и обновления контента.

Среди преимуществ серверного рендеринга выделяют следующие факторы:

  • SEO-оптимизация.

  • Уменьшенное время начальной загрузки.

  • Отлично подходит для статических сайтов.

В то же время CSR также имеет ряд преимуществ, а именно:

  • Быстрая отрисовка после начальной загрузки.

  • Лучшая реакция на действия пользователей.

  • Отлично подходит для веб-приложений.

Таким образом, SSR отлично подходит для образовательных платформ, маркетплейсов и приложений с простым интерфейсом, где количество страниц, функций и динамических данных невелико. В свою очередь, CSR идеально справляется с задачами динамических веб-приложений, таких как социальные сети или мессенджеры, где данные постоянно обновляются, а высокая скорость обработки имеет ключевое значение.

6.Минификация

Минификация (или минимизация) кода — это процесс уменьшения его размера за счёт удаления ненужных символов, таких как пробелы, комментарии и отступы. Этот процесс помогает снизить объём файлов без утраты их функциональности, что ускоряет их загрузку и выполнение. Минификации чаще всего подвергаются файлы JavaScript и CSS.

Процесс минификации включает:

  • Удаление лишних строк, переносов, запятых, пробелов и комментариев.

  • Сокращение имен переменных до одного символа.

  • Упрощение названий цветов и других сущностей.

Инструменты для минификации:

  • NPM-плагины: такие как, CSSNano и CSS-Minify, которые можно легко интегрировать в процесс сборки проекта.

  • Онлайн-сервисы: например, Minify, CSS Minifier и Minify Code, которые позволяют минифицировать код прямо в браузере.

  • CDN-серверы. Некоторые CDN-серверы автоматически минифицируют файлы перед их доставкой пользователям.

    Минификация — это простой, но эффективный способ улучшить производительность вашего сайта. Уменьшение размера файлов и снижение времени загрузки помогает улучшить пользовательский опыт и повысить конверсию. Включение минификации в процесс сборки проекта позволяет автоматизировать этот процесс и обеспечить постоянную оптимизацию кода.

    Как работает минификация
    Как работает минификация

Заключение

В этой статье мы рассмотрели важность скорости загрузки веб-страниц и обсудили основные метрики, как LCP, INP и CLS, которые входят в группу Core Web Vitals и помогают оценить качество пользовательского опыта. Для ускорения работы сайта можно использовать различные методы, такие как серверный рендеринг (SSR), использование CDN, кэширование, lazy loading и т.д.

В заключение хочется сказать, что скорость загрузки сайта — это не просто технический параметр, а ключевой фактор, влияющий на успех вашего проекта. Инвестируя время и ресурсы в оптимизацию производительности, вы сможете не только улучшить ранжирование в поисковых системах, но и повысить конверсию, что в конечном итоге приведет к увеличению доходов и удовлетворенности пользователей.

Спасибо за внимание!
Больше авторских материалов для frontend-разработчиков от моих коллег читайте в соцсетях SimbirSoft –
ВКонтакте и Telegram.

Комментарии (5)


  1. Viacheslav01
    18.02.2025 10:36

    Все очень просто, выкидываете из страниц все свистоперделки, оставляете контента на 100Кб всего. И все работает молниеносно!


    1. electrofetish
      18.02.2025 10:36

      Раньше думал, что вот, с приходом быстрого интернета, все будет открываться за наносекунды.. ну, примерно как в файловом браузере(проводнике).

      ..
      Ошибался.


  1. IvanZaycev0717
    18.02.2025 10:36

    В браузере Google Chrome в "Инструментах разработчика" есть ещё один интересный инструмент - Lighthouse. Он сам анализирует сайт и даёт рекомендации по улучшению производильности.


  1. nsvk13
    18.02.2025 10:36

    Я не Фронтенд разработчик, но периодически беру задачи по вёрстке или какие-то заказы на фрилансе. Я использую Nuxt, и у меня есть не отвеченный вопрос — а действительно ли SSR подходит под малые проекты, а не наоборот? Я наслышан разных мнений и до сих пор не могу прийти к конечному выводу.. Я из бекенда/девопса, поэтому, что-то из фронтенда мне тяжело воспринимать.
    Банально сейчас переписываю многостраничный лендинг на Nuxt & Vue 3, и тоже задаюсь вопросом: А использовать мне SSR или нет. Ведь по сути, SSR работает в "Real Time", никакой статики, данные подгружаются с запросом клиента, по идеи же нагрузка на сервер будет высокой и соответственно, нужно брать машину по больше, нежели чем под статик, или я не до конца понимаю концепцию? Буду благодарен, если Автор сможет это раскрыть под этим комментарием.


    1. Wendor
      18.02.2025 10:36

      Ssr конечно даст нагрузку на бэк. Разделим загрузку страницы с реактивным приложением на части:

      1. Загрузка статики (html/js/css)

      2. Загрузка необходимых для страницы данных (в остовном api)

      3. Формирование контента на странице с учетом полученных данных.

      1-й этап - комментировать не нужно, тут все ясно.

      2-й этап - данные для страницы в любом случае делать. Эти данные нужны на странице. Не особо важно, на сервере вы их запросите или на клиенте.

      3-й этап - эту часть вы всегда умеете делать на клиенте. В случае с ssr, вы можете для роута на который обратился юзер заполнить страницу контентом сразу, тем самым избавив клиент от первого запроса к api. Последующее хождение по роутам все равно будет порождать запросы к api и формирование страницы, но уже ресурсами клиента.

      В чем плюсы ssr? Это быстрее для клиента, это лучше индексируется. В чем минусы? Это нагрузка на бэк)