Медленный TTFB при включении модулей Apache

Недавно я столкнулся с проблемой, которую все еще не могу решить.

Итак, у меня есть торговая площадка, написанная на WordPress. После процесса разработки я попытался оптимизировать скорость, так как сайт по своей природе загружает много ресурсов. Проблема в следующем:

  • Когда mod_deflate и mod_expires включены, я получаю довольно аккуратный время загрузки ресурсов, но огромный (около 10 с!) TTFB.

    Когда mod_deflate и mod_expires отключены, TTFB падает почти до нуля но я получаю огромное время загрузки ресурсов.

Это что-то обычное или уникальное?

0
задан 22 June 2017 в 12:13
1 ответ

Учитывая, что у вас есть проблемы как с включенным, так и с отключенным сжатием, похоже, что основная причина вашей проблемы не в сжатии, а в другом месте.

Вы объясняете, как меняются симптомы при включении / отключении сжатия. Однако изменение симптомов является лишь незначительным изменением, и этого изменения следует ожидать от большинства схем сжатия.

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

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

Некоторые API-интерфейсы позволяют коду, производящему данные, инструктировать код сжатия для очистки буферизованных данных, что, если здесь используется, может привести к тому, что симптом будет выглядеть так же, как в несжатом сетапе. Но если данные, полученные до сих пор, сами по себе бесполезны, не стоит очищать буфер.

Вам следует обратить внимание на то, почему до отправки последнего байта требуется так много времени. Я предполагаю, что если вы попытаетесь измерить время до последнего байта, оно будет примерно таким же со сжатием и без него.

Какова нагрузка на сервер?

Если нагрузка на сервер высока, это может указывать на это занят выполнением задач с интенсивным использованием ЦП для получения ответов на получаемые запросы. Это также может указывать на то, что серверу требуется много операций ввода-вывода (которые обычно можно уменьшить, добавив больше ОЗУ).

Если нагрузка на сервер мала и он по-прежнему медленно отвечает, это обычно означает, что либо ожидание сетевого взаимодействия с другим сервером (возможно, БД или DNS-сервер медленно отвечает). Это также может указывать на ошибку где-то в вашем коде.

Если вы не можете определить по загрузке сервера, проверке сетевого трафика или файлам журналов, что вызывает замедление, вам может потребоваться добавить дополнительные журналы в свое приложение, чтобы узнать, что это так давно.

1
ответ дан 4 December 2019 в 16:13

Теги

Похожие вопросы