Заголовки HTTP: последние изменения - как можно минимизировать нагрузку на сервер? - PullRequest
5 голосов
/ 30 мая 2010

Представьте себе следующий вариант использования:

Я использую AJAX-запрос для получения информации о Item и использую этот URL: http://domain/items/show/1

В моей базе данных все элементы имеют поле с именем modified_at, где мы сохраняем момент, когда этот элемент был ранее изменен.

Как Last-Modified HTTP-заголовок сервера в ответе может минимизировать нагрузку / уменьшить количество запросов / повысить скорость отклика, если нам нужно обрабатывать этот запрос каждый раз на стороне сервера? Похоже, мы не уменьшаем количество HTTP-запросов с этим ответом и не уменьшаем нагрузку на сервер.

Кому это все равно нужно?

Прав ли я, что он используется в основном для экономии полосы пропускания?

Ответы [ 2 ]

3 голосов
/ 30 мая 2010

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

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

1 голос
/ 30 мая 2010

Если вашей реализации всегда будет требоваться запрос базы данных, шансы на реализацию 304 не принесут особой пользы. Возможно, вы сохраняете только ресурсы, необходимые для обработки ответа. Если ваш рендеринг потребует большой обработки, он все же может стоить того, даже если вам требуется запрос базы данных.

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

Как я реализовал похожий сценарий, кешируя каждый запрос на диск. Первая строка в файле (названная так, что не требует сканирования) содержит метаданные, такие как etag и ttl. На основании измененного времени для файла и сохраненного в нем ttl я могу, прочитав только одну строку с диска, решить, должен ли я отправить ответ 304 (возвращающий клиент), содержимое файла кэша (новый клиент или возвращающий клиент, который не видел недавнего рендеринга), или обрабатывает запрос, обычно кэширующий обновленный результат одновременно.

См. Этот вопрос для получения дополнительной информации о реализации 304 ответов. В порядке ли моя реализация HTTP условного получения ответов в PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...