Страница открывается за две секунды или за восемь, и разница почти всегда в том, сколько времени сервер её собирает. В разборе подобных случаев видна общая закономерность: владелец сайта оптимизирует изображения и подключает плагин ускорения, тогда как узким местом оказывается база данных.
Скорость загрузки сайта на PHP складывается из трёх этапов: сервер выполняет PHP-скрипт и отдаёт HTML, браузер загружает файлы страницы, затем страница отрисовывается. За первый этап отвечает PHP, и измеряется он показателем время до первого байта. Высокое значение указывает на проблемы на стороне сервера. Низкое при медленной загрузке страницы говорит о весе файлов и пропускной способности канала связи.
Оглавление
Из чего складывается время загрузки PHP-сайта
Скорость загрузки сайта на PHP складывается из трёх последовательных этапов, каждый из которых имеет собственную природу и собственную зону ответственности. Смешивать их при диагностике нельзя: этап определяет, где искать причину замедления.
Первый отрезок занимает время ответа сервера. Браузер запросил страницу, сервер запустил PHP-скрипт, тот сходил в базу, закончилась генерация HTML, и первый байт страницы ушёл обратно. Второй отрезок занимает загрузка файлов страницы: браузер скачивает стили, скрипты, шрифты и изображения. Третий начинается, когда файлы получены: браузер разбирает разметку страницы, выполняет JavaScript и рисует то, что видит человек. Границу между первым и вторым отрезком показывает время до первого байта.
Высокое значение уводит внутрь сервера, где страницу собирают, к коду, базе, кэшу и ресурсам тарифа. Низкое значение при медленной странице переводит разговор на скорость загрузки ресурсов сайта, то есть на размер файлов, число подключений и канал до посетителя.
Анализ скорости начинается именно с такого разделения: без него оптимизируют изображения на страницах, где реальная задержка возникает на этапе обращения к базе данных. Путаница в этапах обходится дорого и в деньгах: чем дольше открывается страница, тем меньше посетителей дожидается загрузки, часть аудитории уходит, не увидев предложения, и рекламный бюджет тратится впустую. Разделение заодно расставляет зоны ответственности: за серверное время отвечают разработчик и хостинг-провайдер, за вес страницы — те, кто наполняет её контентом и подключает скрипты аналитики.
Почему PHP-сайт отвечает медленно
Серверных причин обычно четыре: медленный код, тяжёлые запросы к базе, нехватка ресурсов хостинга и отсутствие кэширования. У каждой есть характерный признак и своё первое действие.
Медленный код. Признак — страница отдаётся долго даже при хорошем канале и низкой задержке сети. Типичные причины: обработка больших массивов, обращения к внешним API, вложенные циклы, загрузка файлов в рамках запроса. Первое действие — снять профиль: профилировщик PHP и замер отдельных участков кода показывают самые долгие функции. Оптимизацию начинают с них.
Тяжёлые запросы к базе. Признак — генерация страницы замедляется пропорционально объёму данных. На тестовой копии отклик мгновенный, на боевой базе с сотнями тысяч записей страница собирается секундами. Типичные причины: отсутствующие индексы базы данных, выборка лишних столбцов, SQL-запрос внутри цикла. Диагностика — журнал медленных запросов и план выполнения. Решают задачу индексы, ограничение выборки, устранение повторных обращений и кэш редко меняющихся данных. Результат проверяют на странице с реальным объёмом записей.
Нехватка ресурсов хостинга. Признаки — нестабильное время отклика, ошибки 5xx, аварийное завершение процессов PHP, замедление в часы пик. Первое действие — проверить в панели хостинга версию PHP и выделенные лимиты процессов и памяти. Сначала корректируют лимиты и версию, и только затем рассматривают смену тарифа. Решение о переезде принимают по результатам измерений.
Отсутствие кэширования. Без сохранённых копий сервер собирает страницу заново для каждого посетителя, поэтому время ожидания одинаково при любом визите. Серверный кэш бывает трёх видов: результаты компиляции PHP, объекты и готовые страницы. Динамические элементы вроде корзины из кэша исключают, а после изменений его сбрасывают — иначе посетитель увидит устаревшую цену.
Проверка скорости загрузки кодом и онлайн-сервисами
Самый доступный способ измерения для WordPress реализуется одной строкой кода. В файл footer.php активной темы, перед закрывающим тегом body, добавляют три значения. Функция get_num_queries показывает число SQL-запросов при сборке страницы, timer_stop отдаёт время генерации в секундах, memory_get_usage отдаёт израсходованную память в байтах, её делят на 1 048 576 ради мегабайтов. Строка вида «Запросов: 62, время: 1,21 с, память: 38 МБ» говорит о многом: шесть десятков обращений к базе на простой странице уже повод открыть её журнал.
У замера кодом есть граница: он отражает только работу PHP и не учитывает файлы страницы, поэтому быстрая генерация HTML ещё не означает быстрой загрузки. Зато для сравнения состояний до и после он подходит хорошо — достаточно изменить запрос и обновить страницу, чтобы увидеть разницу.
Картину по странице целиком дают внешние сервисы. Google PageSpeed Insights и GTmetrix устроены одинаково: на вход подаётся адрес страницы, на выходе — отчёт с разбивкой по этапам загрузки. В нём учитывается серверное время ответа, вес подгружаемых файлов и поведение страницы в браузере — всё то, что замер кодом не охватывает. Области применения обоих способов удобнее свести в одну таблицу.
| Способ | Что меряет | Точность | Трудоёмкость | Когда применять |
|---|---|---|---|---|
| Код в footer.php | Запросы, время генерации, память | Точен по PHP, слеп к файлам | Правка файла темы | Сравнение до и после вмешательства в код |
| Google PageSpeed Insights | Серверное время, вес файлов, отрисовка | Единая методика снаружи | Вставить адрес | Общая диагностика страницы |
| GTmetrix | Разбор по каждому файлу, время до первого байта | Видно, какой файл тормозит | Адрес и регион теста | Вклад отдельных файлов |
| Журнал медленных запросов | Запросы дольше порога | Самая высокая по базе | Включает хостер | Подозрение на базу данных |
Достоверный вывод даёт серия замеров утром и вечером, при этом холодный и повторный запросы учитываются отдельно: первое обращение после сброса кэша и следующее за ним. Дополнительно страница проверяется с разных устройств и типов подключения.
Если медленно открывается только один раздел, его код, запросы к базе и подключаемые файлы сравниваются с соседней быстрой страницей — источник задержки обычно обнаруживается именно в этой разнице. Такая сверка входит в стандартный порядок технической диагностики, с которой начинается SEO-продвижение сайта.
Влияние ресурсов страницы и сети на загрузку
Когда HTML получен, дальше время съедают файлы страницы: как правило, тяжелее всего изображения, следом JavaScript, стили и шрифты. Меры известны: изображения сжимают и отдают в современных форматах, применяют минификацию CSS и JavaScript, включают отложенную загрузку для блоков ниже первого экрана, раздают статику через CDN. На скорость загрузки элементов сайта влияют и их число, и суммарный вес с порядком подключения, но на современных протоколах вес обычно важнее.
Важная оговорка: оптимизация файлов не заменяет работу над серверным кодом, а лишь сокращает объём данных, передаваемых между сервером и посетителем. Если сборка страницы занимает две секунды, сжатие изображений сэкономит доли секунды, а исходные две секунды сохранятся. Отсюда и приоритет: сначала время ответа сервера, затем вес страницы.
Третий участник это сеть: расстояние до дата-центра, маршрутизация провайдера, роутер и Wi-Fi. Когда серверное время мало, а сетевая задержка велика, проблема лежит вне кода, и помогают выбор ближайшего дата-центра и тот же CDN.
Отдельно про защищённое соединение: HTTPS добавляет к первому визиту установку TLS с проверкой сертификата и согласованием ключей. Задержка приходится на старт сессии, дальше соединение переиспользуется и уже незаметно. Заметной она становится при удалённом дата-центре и мобильном подключении. Таким образом, https влияет на скорость загрузки сайта только на этапе установки соединения и редко оказывается основной причиной замедления.
Отсюда следует ответ на вопрос про скорость загрузки html сайта: лёгкая разметка ускоряет доставку самого документа, а дальше браузер запрашивает остальные файлы.
Перед обсуждением задачи имеет смысл пройти по чек-листу вопросов к разработчику или хостеру.
- Каково время ответа сервера на типовой странице и каким оно было месяц назад
- Включено ли кэширование страниц, какого вида и что из него исключено
- Какая версия PHP стоит и когда обновлялась
- Ведётся ли журнал медленных запросов и что в его верхних строках
- Какие лимиты процессов и памяти даёт тариф и упирались ли мы в них
Ответы на эти пять вопросов сразу сужают круг гипотез. Когда конкретных ответов по этим пунктам нет, начинать нужно не с оптимизации, а с настройки измерений — и первым результатом работы станут как раз измеримые показатели.
Ниже приведён порядок из пяти шагов, пригодный и как техническое задание подрядчику. Шаги выстроены от измерения к правке: сначала определяется, где именно теряются секунды, и только затем вносятся изменения в код, кэш и файлы. Каждый шаг завершается признаком закрытия и указанием типичной ошибки. Пропуск шагов невыгоден: без контрольных замеров оптимизация сводится к перебору наугад.
- Контрольные замеры снимаются на трёх страницах, утром и вечером. Шаг закрыт, когда собрана таблица значений, а не одно число. Типичная ошибка — единственный замер.
- Изучаются журналы PHP, веб-сервера и базы данных. Шаг закрыт, когда выписаны пять самых долгих запросов и повторяющиеся ошибки. Одного журнала ошибок для этого недостаточно.
- Код и запросы правятся начиная с самых долгих функций. Результат виден, когда время генерации той же страницы сократилось. Изменения вносятся по одному, иначе связь причины и следствия теряется.
- Включается кэширование с исключением динамических разделов. Признак успеха — повторное обращение быстрее холодного. Чаще всего забывают о сбросе кэша после публикации.
- Файлы сжимаются, после чего тест повторяется из разных сетей. Вывод делается по серии замеров: единичная проверка с офисного Wi-Fi ничего не подтверждает.
Если после пяти шагов отклик остаётся прежним, ошибки 5xx повторяются, а измерения расходятся между собой, узкое место не найдено. В этом случае по каждой странице собираются замеры и журналы, а по внесённым изменениям фиксируется, что именно правилось и с каким результатом. Объём гарантии и стоимость переделки уточняются при заказе: доработка чужого кода обычно дороже первичной настройки, поскольку время уходит на разбор чужой логики.




