Как я могу убедиться, что javascript и изображения кэшируются?

Я хочу убедиться, что файлы изображений, css и javascript, являющиеся частью моей страницы, кэшируются моим браузером. Я использовал Fiddler и Google Page Speed, и неясно, дают ли они мне нужную информацию. Fiddler показывает ответ HTTP 304 для изображений, css и javascript, который должен указать браузеру использовать кешированную копию. Google Page Speed ​​показывает ответ 304, но не показывает нулевой размер передачи, вместо этого показывает полный размер файла ресурса. Также обратите внимание: я видел, как Google Page Speed ​​сообщает о ответе 200, но затем ставит слово (кэш) рядом с 200 (так что статус равен 200 (кэш)), что не имеет большого смысла.

Любые другие предложения относительно того, как я могу проверить, отправляет ли сервер обратно изображения, css, javascript после того, как они были извлечены и кэшированы при переходе на предыдущую страницу?


person BestPractices    schedule 24.03.2010    source источник


Ответы (4)


В вашей ситуации проще всего использовать отладчики HTTP в браузере. Попробуйте HTTPFox для Firefox или Opera со встроенной стрекозой. Оба они указывают, когда использовался локальный кеш браузера.

Если вы получаете противоречивую информацию, то wireshark/tcpdump покажет вам, загружаются ли объекты или нет, поскольку он отслеживает фактические передаваемые и получаемые сетевые пакеты. Если вы раньше не просматривали сетевые трассировки, это может поначалу вас немного сбить с толку.

person a'r    schedule 24.03.2010
comment
Пытаюсь использовать HTTPFox, но не могу найти его документацию. Для ресурсов, которые приводят к ответу 304, размер полученного файла отображается как (XXX), например. (1134); для ответа 200 у него нет скобок, например. 1134. Указывает ли скобка на то, что он кэшируется локально и файл на самом деле не передается? - person BestPractices; 24.03.2010
comment
Ну конечно; естественно. Ответ 304 не имеет тело для указания размера. - person hobbs; 27.03.2010

В скрипаче проверьте, что тело ответа (для изображений, css) пусто. Также убедитесь, что ваш максимальный возраст достаточно длинный в заголовке Cache-Control. Большинство браузеров (Safari, Firefox) имеют хорошие инструменты для анализа трафика.

person jholster    schedule 24.03.2010
comment
Значит, он снова сделает запрос, но просто ответит пустым ответом? Я думал, что браузер не будет повторно запрашивать ресурс, если он был кэширован. - person Merritt; 24.03.2010
comment
Он делает запрос снова - сервер должен сообщить браузеру, не был ли ресурс изменен (предоставив ему ответ 304). Выглядит примерно так: HTTP/1.1 304 Not Modified Дата: среда, 24 марта 2010 г., 14:51:02 по Гринвичу. X-Powered-By: Servlet/2.5 JSP/2.1 - person BestPractices; 24.03.2010
comment
Клиент может использовать кешированную копию и не делать новый запрос до истечения срока действия заголовков max-age или Expires, после чего он может спросить сервер, не изменился ли файл. (Если-Изменено-С). Существуют и другие механизмы кэширования, например. Этаг. См. mnot.net/cache_docs и w3.org/Protocols/rfc2616/rfc2616-sec14.html - person jholster; 25.03.2010

Журналы доступа к вашим серверам могут дать вам много информации о том, насколько эффективна ваша стратегия кэширования.

Допустим, у вас есть html-страница /home.html, которая ссылается на /some.js и /lookandfeel.css. За заданный период времени суммируйте количество запросов ко всем трем файлам.

Если ваше кэширование эффективно, вы должны увидеть огромное количество запросов для home.html, но очень мало для css или js. Где-то посередине, когда вы видите одинаковое количество запросов для всех 3, но css и js имеют 304. Хуже всего, когда вы видите только 200.

Очевидно, что вы должны знать свое приложение, чтобы провести такое исследование. Файлы js и css могут использоваться на нескольких страницах, что может усложнить анализ. Но общая идея остается в силе.

Преимущество такого исследования заключается в том, что вы можете узнать, насколько эффективна ваша стратегия кэширования для ваших пользователей, в отличие от «работает ли кэширование на моей машине». Однако это не заменяет использование http-прокси/скрипача.

person Sripathi Krishnan    schedule 27.03.2010

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

http://www.fiddler2.com/redir/?id=httpperf объясняет эту тему подробнее.

person EricLaw    schedule 24.03.2010