кеш браузера обойден в firefox? - PullRequest
4 голосов
/ 18 марта 2009

Рассмотрим следующую html-страницу, которая может загружаться во многие большие png-файлы:

<html>
<head>
<script type="text/javascript">

function hide( )
{   document.getElementById("here").innerHTML = "hidden";
}    
function show( )
{   var loadMe = "";
    for (var i=1; i<250; i++)
    {   loadMe += "<img src='http://domain.com/" + i + "_a.png'><br>";
        loadMe += "<img src='http://domain.com/" + i + "_b.png'><br>";
    }
    document.getElementById("here").innerHTML = loadMe;
}
</script>
</head>
<body>
<a href="javascript:hide();">hide</a>
<a href="javascript:show();">show</a>
<div id="here"></div>
</body>
</html>

В IE, Safari & Opera на компьютере с Windows изображения на этой странице загружаются только один раз (отслеживаются с помощью FreeMeter), когда переключаются кнопки показа и скрытия.

Однако в Firefox (только что установлен) некоторые образы загружаются с сервера несколько раз (мы никогда не совпадаем с начальным пиком в сетевых запросах ... некоторые вещи загружаются из кэша).

Заголовки ответов на рисунках гласят:

Date              Wed, 18 Mar 2009 11:42:02 GMT
Server            Apache/2.2.3 (Red Hat)
Last-Modified     Mon, 27 Oct 2008 19:19:47 GMT
Etag              "1abb7d7-292-45a41039f7ac0"
Accept-Ranges     bytes
Content-Length    658
Cache-Control     max-age=7257600
Expires           Thu, 15 Apr 2010 20:00:00 GMT
Connection        close
Content-Type      image/png

Рассматривая about: cache , большинство загруженных изображений отображаются там (хотя при проверке кэша между щелчками «скрыть / показать», по-видимому, отсутствуют изображения):

Number of entries:  462
Maximum storage size:   50000 KiB
Storage in use:     5593 KiB

...

Key: http://domain.com/23_a.png
Data size: 16139 bytes
Fetch count: 13
Last modified: 2009-03-18 07:40:14
Expires: 2009-06-10 07:40:00

Что Firefox ожидает от меня, чтобы перезагрузить эти изображения из кэша, чтобы мы могли легко выполнять сетевые вызовы? Спасибо!


Обновление

Если я открою эту страницу в новой вкладке после показа / скрытия на первой вкладке, вторая вкладка не будет выполнять сетевых запросов. Первая вкладка продолжает делать сетевые запросы.

Ответы [ 4 ]

3 голосов
/ 20 марта 2009

Ошибка описана здесь

1 голос
/ 18 марта 2009

В дополнение к ответу Рича, вы можете попробовать изменить кеш Firefox значения конфигурации и посмотреть, не изменят ли они поведение:

browser.cache.check_doc_frequency
browser.cache.disk.capacity
browser.cache.memory.capacity
1 голос
/ 18 марта 2009

Другим способом устранения попадания в кэш, повышения производительности страницы и уменьшения перегрузки сети (вообще говоря, только два запроса на домен выполняются одновременно) было бы использование CSS Sprites .

Если все ваши изображения имеют одинаковый размер, объедините некоторые из них и используйте CSS, чтобы контролировать положение отображаемого изображения. Вы сохраните HTTP-запросы для каждого дополнительного изображения и значительно улучшите страницу. Многие крупные веб-сайты (например, Yahoo!) используют эту технику.

1 голос
/ 18 марта 2009

Я не могу сказать вам, почему Firefox ведет себя таким образом (или еще лучше, как отменить это поведение), но я бы предложил другой подход, который мог бы обойти проблему. Вместо того, чтобы строить строку html снова и снова и полностью удалять эти img-элементы из dom, почему бы просто не собрать ее один раз с внешним контейнером div и показать / скрыть div? Таким образом, IMG всегда являются частью домена (и Firefox, скорее всего, не будет чувствовать необходимости удалять изображения из кэша).

...