2010-05-14 2 views
7

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

Мы хотели бы использовать подобную систему для той, которую использует GMail. Когда он обнаруживает, что кеш вашего браузера заполнен , он не ведет себя так, как должен, он показывает предупреждение, сообщающее пользователям, что их кеш заполнен и что это может вызвать проблемы с GMail, а также ссылку на Gmail Help page on clearing your browser's cache.

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

Спасибо.


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


Далее Разъяснение: Спасибо всем за обновлениями на кэширование. Наши скрипты отправляются с правильными заголовками, и мы видим эту проблему только в IE6 и IE7 - браузеры Mozilla и WebKit кажутся незатронутыми - но я все еще не уверен, как именно мы будем использовать JavaScript и/или XmlHttpRequest, чтобы проверить, был ли извлечен объект из кеша, что позволяет нам проверить, плохо ли работает кеш.

+1

Независимо от того, действительно ли это возможно (я сомневаюсь), когда кеш браузера считается полным, так как он в основном представляет собой очередь, в которой самые старые данные удаляются, когда требуется пространство. Или когда это не полно? Быть не полным требует от пользователя регулярного опорожнения, что большинство людей никогда не делает ... – RoToRa

+2

Мне любопытно, как и почему вы определили, что кеш * full * был проблемой, а не конфликтующими данными в кеше или что-то подобное. Во всяком случае, если вы тот же человек, который получил много злоупотреблений на comp.lang.javascript (http://groups.google.co.uk/group/comp.lang.javascript/browse_thread/thread/45bcce73055047bd/d003efbfda8c4512) , Я надеюсь, что вы получите лучшее лечение от stackoverflow ... –

+0

Хе-хе ... нет, это не я на comp.lang.javascript. Я полагаю, что я действительно спрашиваю, что GMail делает, чтобы обнаружить, что кеш вашего браузера * полный *, и показать это сообщение нашим конечным пользователям. Через вашу ссылку, и после быстрого чтения мне удалось найти эту дискуссию (http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/ce1ac46f82dfa7c9?pli=1), которая объясняет, что вероятно, происходит, и как это сделать. Спасибо! – abitgone

ответ

5

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

  1. Если кеш браузера заполнен, браузер просто должен загрузить свежий контент и вытащить его из своего локального кеша. (например, медленнее)
  2. Если кеш браузера содержит недопустимые данные (например, старую копию файла JavaScript), то да, могут возникнуть проблемы. (не потому, что кеш заполнен, а потому, что вы не загрузили свежий файл для пользователя (Google для: expires headers и как изменить путь URL к вашим файлам при внесении изменений в скрипт, чтобы обеспечить «разрывание» кеша))
  3. В Internet Explorer, когда вы нажимаете на файл загрузки (например, электронную таблицу Excel) пользователю, он должен перейти в кеш для работы (ошибка IE) - я не уверен, если файл больше чем общий кэш доступа пользователей, если это вызывает проблемы с файлом хранится, и поэтому загружены (штабелеры пожалуйста, не стесняйтесь, чтобы проверить, действительно ли это так или иначе)

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

  • Изменение URL в скриптах, когда вы хотите, новая версия будет загрузить (например,)
    • http://example.com/scripts/latestThing.js?ver=3425
    • где «вер» вытягивается из системы управления версиями, чтобы всегда заставить браузер загрузить свежую копию любой раз, когда вы изменить свой сценарий.
  • После того, как вы уверены, что URL-адрес изменился, вы можете отправлять заголовки кеша, которые сообщают браузеру о кешировании файлов в течение очень длительного времени (например, ваши файлы библиотеки JS (например, jQuery), вероятно, не меняются каждый час , день, неделя или даже месяц)
+0

Учитывая это, предложите ли вы ожидать до тех пор, пока страница не закончит загрузку, а затем отпишет асинхронный запрос для (заголовков) того же сценария, который мы загружаем в разделе '' страницы, а затем проверяем, он был загружен из кеша или с сервера? – abitgone

0

Это, вероятно, не будет работать так, как есть. Но его просто идея:

var img = new Image(); 
(new Image).src = "imageWithFarFutures.png"; 
window.onload = function(){ 
    document.getElementById("someIframe").src = "imageWithFarFutures.png"; 
    // NOW if the server DOES get a FRESH request for "imageWithFarFutures.png" 
    // wouldn't it mean that the browser has kicked it out of its cache? 
}; 
0

Рассмотрите возможность отправки заголовка, чтобы ваше приложение никогда не кэшировало ваш контент и чтобы оно немедленно истекало.

+0

Почему? Это полностью против того, что мы пытаемся сделать - мы хотим, чтобы этот конкретный кусок контента был кешем. – abitgone

Смежные вопросы