Я могу думать о следующих причинах:
Хранение набора зафиксированных типов вызванной исключительной ситуации, как часть API, так, чтобы вызывающие стороны только волновались о фиксированном наборе исключений. В Java Вы практически вынуждены сделать это из-за механизма контролируемых исключительных ситуаций.
Добавление некоторой контекстной информации к исключению. Например, вместо того, чтобы позволить пустой "записи, не найденной", проходят от DB, Вы могли бы хотеть поймать его и добавить "... при обработке порядка № XXX, поиске продукта YYY".
Выполнение некоторой очистки - заключительные файлы, откатывая транзакции, освобождая некоторые дескрипторы.
Итак, в конце концов, единственный надежный способ сделать это (благодаря IE6) - использовать случайный , или ограничение по времени querystring.
Вы можете использовать строка запроса с ограничением по времени это изменяется только каждые 15 секунд (или в любой другой период времени), поэтому вы уменьшите количество обращений к серверу, так как вы увидите локально кэшированный контент в течение этих 15 секунд.
Если у вас есть стандартный совместимый браузер , вы можете обойтись, только используя ETags .
Вы также можете использовать текущее время Unix в миллисекундах, чтобы избежать проблемы большого количества запросов за одну секунду (гораздо меньше шансов получить несколько запросов за одну миллисекунду)
var url = "http://whatever.com/stuff?key=value&ie=" + (new Date()).getTime();
Использование случайного числа (не временной метки) в строке запроса или фактическое изменение имени файла - это два рекомендуемых метода. Стив Содерс и группа специалистов YAHOO! опубликовали тонну полезной информации и методов, которые они обнаружили и разработали при оптимизации одного из самых посещаемых объектов в мире.
У меня та же проблема, но будьте осторожны, за одну секунду может быть много запросов. Вот почему я использую это:
$.getJSON("http://server/example?param=value&dummy=" + Math.random(), ...);
Пробовали ли вы добавить в ответ заголовок ETag ? Вы можете использовать случайное значение или контрольную сумму сгенерированной страницы, чтобы при необходимости использовалась кешированная версия.
Я не уверен, как себя ведет IE, но с последними версиями это должно работать.
См. также раздел HTTP RFC в ETag
Предполагая, что вы используете jQuery, вместо использования $ .get или $ .getJson, используйте более общий $ .ajax и явно установите для значения кэша значение false. Ниже приведен пример:
$.ajax({
url: "/Controller/Action",
cache: false,
type: "GET",
dataType: "json",
success: function(data, textStatus) {
alert("success");
}
});
Требуется немного больше кода (хотя и не намного), чем при использовании .getJson или .get, но решит проблему чисто, без добавления случайных чисел.