уважаемые переполнители стека,
Итак, я недавно пытался полностью сосредоточиться на кэшировании HTTP-ресурсов. Примечательно, что сейчас я просто смотрю на кеширование отдельного изображения со спрайтом, которое используется для рендеринга значков / небольших изображений по всей странице. Вот объяснение странного поведения, которое я вижу:
Итак, на данной странице у меня есть только одно изображение: icons.sprite.gif. Есть четыре элемента, которые используют спрайт для отображения различных значков на странице. В моей конфигурации Apache у меня установлен mod_expires и следующие директивы управления кэшем:
ExpiresActive On
ExpiresDefault "access plus 300 seconds"
ExpiresByType text/html "access plus 1 day"
ExpiresByType text/css "access plus 1 day"
ExpiresByType text/javascript "access plus 1 day"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/jpg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType application/x-shockwave-flash "access plus 1 day"
Теперь вот странность. В Safari, когда я загружаю страницу, сетевой инспектор показывает только один запрос на спрайт. Это прекрасно, работает как положено. С другой стороны, с помощью Internet Explorer и Firefox Fidder / Firebug выдает четыре успешных запроса на изображение в формате sprited = что !? Последующие запросы приводят к одному попаданию в кэш, но эта первая загрузка содержит четыре одновременных запроса. Это выглядит как довольно большой код, так как кажется, что он обходит весь смысл спрайта, который заключается в уменьшении количества запросов ресурсов в данном цикле загрузки страницы.
Что может происходить:
Страница загружается достаточно быстро, так что к тому моменту, когда второй элемент отображается в документе, использующем фоновое изображение со спрайтом, первый запрос на спрайт еще не завершен. Соответственно, учитывая, что ресурс еще не кэширован, так как более поздние элементы отображаются, они приводят к новому запросу на ресурс, даже если он уже загружен. Safari как-то обрабатывает и предотвращает это (я знаю, что методы кэширования Safari несколько отличаются от других браузеров).
Итак - я ищу подтверждение / ввод здесь. Работает ли это «как ожидалось» для этих браузеров - кроме того, сводит ли это на нет прирост производительности, связанный со спрайтингом (что приводит к сложностям обслуживания css)? Или я что-то не так делаю?
Я ценю ваши мысли / предложения.
Приветствия
Skone