Зачем кешировать AJAX с помощью jQuery? - PullRequest
2 голосов
/ 08 февраля 2011

Я использую jQuery для AJAX.У меня простой вопрос - зачем кеш AJAX?На работе и в каждом уроке, который я читаю, они всегда говорят, чтобы установить кеширование на false.Что произойдет, если вы этого не сделаете, будет ли сервер «хранить» такие запросы и «забиваться»?Я нигде не могу найти хорошего ответа - просто ссылки, указывающие, как установить кэширование в false!

Ответы [ 7 ]

4 голосов
/ 08 февраля 2011

Дело не в том, что сервер хранит запросы (хотя они могут выполнять некоторое кеширование, особенно сайты с большим объемом, как это делает SO для анонимных пользователей).

Проблема заключается в том, что браузер будет хранить ответ, который он получит, если ему будет дано указание (или в случае IE, даже если он не получен). Обычно вы устанавливаете cache: false, если вы не хотите, чтобы в браузере пользователя отображались устаревшие данные это получено X минут назад, например.


Если это поможет, посмотрите, что делает cache: false, он добавляет _=190237921749817243 в виде пары строк запроса (случайное число, текущее время, поэтому оно всегда .... текущее). Это заставляет браузер снова запросить данные у сервера, поскольку он не знает , что означает эта строка запроса, это может быть другая страница ... и поскольку он не может знать или быть уверенным, что у него есть для извлечения снова.

2 голосов
/ 08 февраля 2011

Сервер не будет кэшировать запросы, браузер будет. Помните, что браузеры созданы для быстрого отображения страниц, поэтому у них есть кеш, который сопоставляет URL-адреса с последними результатами, возвращенными этими URL-адресами. Ajax-запросы - это URL-адреса, возвращающие результаты, поэтому их также можно кэшировать.

Но обычно Ajax-запросы предназначены для выполнения чего-либо, вы не хотите их пропускать никогда, даже если они выглядят так же, как URL предыдущего запроса.

Если браузер кэширует запросы Ajax, у вас будут устаревшие ответы, а действия сервера будут пропущены.

1 голос
/ 08 февраля 2011

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

1 голос
/ 08 февраля 2011

Если вы не отключите его, у вас возникнут проблемы с попыткой выяснить, почему ваш AJAX работает, но ваши функции не реагируют так, как вам бы того хотелось. Принудительная повторная проверка на уровне заголовка, вероятно, является наилучшим способом получения кеш-ассимиляции данных, в которых находится AJAX.

0 голосов
/ 08 февраля 2011

Браузер кэширует информацию, а не сервер.Смысл использования Ajax обычно заключается в том, что вы будете получать информацию, которая меняется.Если есть часть веб-сайта или что-то, что, как вы знаете, не изменится, вы не будете беспокоиться об этом более одного раза (в этом случае кэширование в порядке), в этом и заключается прелесть Ajax.Поскольку вы должны иметь дело только с информацией, которая может меняться, вы хотите получить новую информацию.Поэтому вы не хотите, чтобы браузер кэшировал.

Например, Gmail использует Ajax.Если бы кэширование было просто оставлено, вы бы не видели ваше новое электронное письмо довольно долго, что было бы плохо.

0 голосов
/ 08 февраля 2011

Проблема, как всегда, в Internet Explorer. IE обычно кэширует весь запрос . Таким образом, если вы неоднократно запускаете один и тот же AJAX-запрос, то IE сделает это только один раз и всегда покажет первый результат (даже если последующие запросы могут возвращать разные результаты).

0 голосов
/ 08 февраля 2011

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

Если вы извлекаете статический контент через AJAX, вы можете оставить кеширование включенным, но насколько вы уверены, что это так?Вы никогда не захотите изменить этот загруженный контент?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...