Оптимизация бэкенда для ускорения работы сайта
Сайт должен быть устойчивым к высоким нагрузкам — чем быстрее он обрабатывает каждый отдельный запрос, тем больше пользователей одновременно может с ним работать. Сложные веб-страницы должны генерироваться не более 1 секунды, иначе пользователь просто закроет ваш ресурс и уйдёт на другой.
Скорость загрузки сайта зависит от скорости работы фронтенда и бэкенда — серверной части. О ней мы с вами и поговорим в этой статье. Многие задачи по оптимизации бэкенда можно решить быстро и без больших вложений, и результат очень скоро будет заметен.
Кеширование
Хороший способ снизить сетевой трафик. При поступлении запроса не происходит обращения к исходному серверу — вместо этого загружается копия из кеша. Но его нужно правильно настроить, учитывая, что на сайте постоянно что-то меняется. Старая копия должна храниться ровно до момента внесения изменения. Если вы используете распределённую на несколько серверов инфраструктуру, и веб-сервер и БД находятся отдельно, кеш лучше хранить на веб-сервере.
Разделение и другие методы оптимизации запросов
Запросы стоит разделить, если они идут не параллельно, а суммируются. Это позволит вам уменьшить общее время запроса. Важно учитывать возможности языка программирования: в некоторых из них такая возможность есть только в определённых версиях.
Для исполнения одних и тех же запросов не обязательно поднимать каждый раз новое соединение. Этот процесс излишне нагружает сервер. Лучше использовать повторно предыдущие соединения, настроив их так, чтобы они не закрывались при завершении скрипта. Также есть так называемые хранимые процедуры, которые помогают объединить последовательность запросов и сохранить их на сервере.
Все второстепенные элементы веб-страниц можно вынести в отдельный запрос. Например, чтобы реклама подгружалась отдельно от основного контента. От запроса лишних данных стоит отказаться — бывает, что сначала отбирается больше данных, чем нужно, а потом лишние отбрасываются. Это даёт нагрузку на сервер, повышает потребление памяти и процессорного времени. Проверять наличие неиспользуемых таблиц или полей в запросах приходится вручную, но результат стоит того.
Также не стоит запрашивать в цикле данные у базы, это тоже сократит время отклика. А дебаунсы лучше отключить. Их используют, чтобы скрыть процессы загрузки и показывать пользователю только результат. Ускорить отклик помогает и расстановка индексов — они дают быстрый доступ к данным без обращения к таблице. Но их не должно быть слишком много, так как они тоже добавляют размера БД.
Денормализация
Метод, при котором структуру БД специально приводят в состояние, не соответствующее требованиям нормализации. Для этого избыточные данные помещают туда, где они смогут принести максимум пользы. Вариантов тут несколько — добавление новых таблиц или использование дополнительных полей в уже существующих, дублирование таблиц. Это позволяет увеличить скорость обработки запросов.
Примечание. Таким изменениям нужно подвергать только нормализованные базы. То есть при лучшем раскладе БД сначала должна пройти нормализацию, и только потом — денормализацию.
Проверка скорости загрузки бэкенда
Есть два популярных инструмента:
- Яндекс.Танк. Сервис нужен для проведения нагрузочных тестирований. Он также анализирует производительность сайтов и показывает, как он работают под любой нагрузкой.
- TIG (Telegraf, Influx, Grafana). Для использования инструмента нужно сначала настроить систему мониторинга. После этого открывается доступ к статистике. Разработчик может узнать, как используются ресурсы сервера, с какой скоростью работают отдельные узлы системы.
Также важно отслеживать показатель TTFB (время до получения первого байта). Он показывает, насколько загружен сервер, сильно ли задерживается передача данных между браузером и сервером и с какой скоростью движок генерирует контент. Если показатель хороший, это не всегда указывает на то, что данный сайт очень хорошо загружается. Но если вы видите плохое значение TTFB, это точно говорит о недостаточной скорости загрузки.
Для проверки производительности стоит и взглянуть на полный лог SQL-запросов. Иногда разработчику кажется, что проблема находится в одном месте, а на самом деле оказывается, что она на другом участке. Нужно также проанализировать код на наличие самых медленных мест, а потом их внимательно рассмотреть. Нужно будет убрать лишние части кода. Такое бывает, если элемент с сайта убрали, а код почистили не до конца.
Если все приведённые выше методы особо не помогли увеличить скорость загрузки сайта, возможно, вам пора сменить серверное оборудование на более производительное.
Использование сети CDN
Можно обратиться к CDN-провайдерам, чтобы расположить файлы на разных серверах. Дело в том, что с одного домена можно параллельно загружать максимум шесть файлов. А CDN-сеть даёт более широкие возможности для загрузки файлов.
Примечание. Есть ещё один способ для более быстрой загрузки — уменьшить размер файлов и объединить их. Например, из трёх отдельных файлов с элементами дизайна сделать один. У вас получится CSS-спрайт, архив с несколькими составляющими.
Для владельцев высоконагруженных интернет-магазинов в Джино есть тарифы для 1C-Битрикс с возможностью подключения бесплатного CDN-модуля. Подробнее о модуле читайте здесь.
Запомнить
Бэкенд — серверная часть сайта, от которой во многом зависит скорость загрузки приложения.
Кеширование ускоряет загрузку за счёт использования копий.
Запросы нужно оптимизировать — разделить, убрать из них лишние данные, объединить последовательности запросов.
Денормализация позволяет удобно размещать избыточные данные и увеличить скорость обработки запросов.
Яндекс.Танк и TIG — удобные инструменты для анализа производительности сайтов.
CDN-сеть даёт широкие возможности для одновременной загрузки файлов.