Кэш Аякса поддерживается браузером. Для определенного URL -адреса, отправленного на сервер, Ajax взаимодействует с сервером только во время первого запроса. В последующих запросах Ajax больше не представляет запрос на сервер, но извлекает данные непосредственно из кэша.
В некоторых случаях нам нужно каждый раз получать обновленные данные с сервера. Идея состоит в том, чтобы сделать URL -адрес по -разному, не влияя на нормальное приложение: добавьте случайный контент после URL.
например
url = url+"&"+math.random ();
Ключевые моменты:
1. URL -адрес, запрашиваемый каждый раз, отличается (Ajax Cache не работает)
2. Это не влияет на нормальное применение (самое основное)
Здесь у нас есть два вывода:
1: Кэш AJAX и HTTP Cache одинаковы
Механизмы HTTP и кэширования современных браузеров намного хуже, чем механизм AJAX Xmlhttprequest, поэтому он не распознает и не заботится о запросах Ajax. Это просто следует обычным правилам кэширования HTTP и кэширует их через заголовок ответа, возвращаемый сервером.
Если у вас уже есть понимание кэша HTTP, вы можете использовать знание HTTP Cache, чтобы понять кэш AJAX. Единственное отличие состоит в том, что способ установления заголовков ответов будет отличаться от того, как у обычных файлов.
Следующие заголовки ответов могут сделать ваш Ajax Cachable:
Срок действия истекает: этот предмет должен быть установлен на подходящий момент времени в будущем. Настройка момента времени зависит от частоты изменений контента. Например, если запрашиваемое количество запасов, значение истекает через 10 секунд. Если запрашиваемая фотография, значение истечения срока действия может быть длиннее, потому что она не будет часто изменяться. Заголовок истечения срока действия позволяет браузеру повторно использовать локальные кэшированные данные в течение определенного периода времени, что избегает никакого ненужного взаимодействия с данными сервера.
Полномодированный: Настройка этого элемента-хороший выбор. Благодаря этому браузер будет использовать, если модифицированный в заголовке запроса проверяет локальный кэшированный контент при отправке условного запроса на получение. Если данные не нужно обновляться, сервер вернет статус ответа 304.
Контроль кэша: в случае соответствующих обстоятельств это значение должно быть установлено на публику, чтобы весь промежуточный прокси и кэш можно сохранить и обмениваться с другими пользователями. В Firefox он также поддерживает кэш для запросов HTTPS.
Конечно, если вы используете метод Post для отправки AJAX, его нельзя кэшировать, потому что запросы POST никогда не будут кэшированы. Если ваш запрос Ajax будет иметь другие эффекты (например, переводы между банковскими счетами), используйте запрос Post.
Мы настроили демонстрацию (эта демонстрация больше нельзя просмотреть (□) ノ), чтобы уточнить, как работают эти заголовки. В httpwatch вы можете видеть, что мы установили три вышеуказанные заголовки ответов в информации заголовка ответа.
Если вы регулярно нажимаете кнопку «Обновление Ajax», изменения времени, как правило, остаются за каждую минуту. Потому что заголовок ответа истекает на следующую минуту. На скриншоте ниже вы можете увидеть: когда вы нажимаете кнопку «Обновление», запрос AJAX будет читать локальный кэш браузера без создания сетевой активности (значения отправки и передачи составляют 0)
Запрос AJAX, отправленный последним щелчком на 1: 06.531, сгенерировал передачу сетевых данных, поскольку кэшированные данные превысили одну минуту. Сервер вернул 200 статуса ответа, чтобы указать, что была получена новая копия данных.
Угадайте, эта демо должна быть кнопкой, получайте текущее время каждый раз, когда вы нажимаете, а затем возвращайтесь на текущую страницу.
2: IE Browser не будет обновлять контент, полученный через AJAX до истечения времени.
Иногда Ajax используется для заполнения определенных частей страницы (например, прайс -лист), когда страница загружена. Он не запускается событием пользователя (например, нажатие кнопки), но отправляется через JavaScript при загрузке страницы. Как будто запросы Ajax такие же, как и те встроенные ресурсы (такие как JS и CSS).
Если вы разрабатываете такую страницу, при ее освежении, вы можете обновить встроенный контент запроса AJAX. Для встроенных ресурсов (файлов CSS, изображений и т. Д.) Браузер автоматически отправит следующие различные типы запросов, обновляет ли пользователь F5 (обновление) или Ctrl+F5 (Force Refresh):
1.f5 (обновление): если содержимое запроса имеет последнюю модифицированный заголовок ответа, браузер отправит запрос на условное обновление. Он использует заголовок запроса IF-модифицированного и звена для сравнения, чтобы сервер мог вернуть статус 304, чтобы избежать передачи ненужных данных.
2.ctrl+F5 (PICT Refresh): сообщает браузере отправить безоговорочный запрос на обновление, а контроль за кешем заголовка запроса устанавливается на «без Cache». Это говорит о всех промежуточных прокси и кэше: браузер должен получить последнюю версию, независимо от того, был ли она кэширована.
Firefox распространяет этот метод обновления в те запросы AJAX, отправленные при загрузке страницы, и рассматривает эти запросы AJAX как встроенные ресурсы. Ниже приведен скриншот httpwatch под Firefox, показывающий эффект запросов Ajax, когда страница освежает (F5):
Firefox гарантирует, что запрос, инициированный Ajax, является условным. В этом примере, если данные кэшируются менее чем за 10 секунд, сервер возвращает 304, если он превышает 10 секунд, сервер возвращает 200 и повторяет данные.
В IE запрос AJAX, инициированный при загрузке страницы, считается, что не имеет ничего общего с обновлением других частей страницы, и не будет влиять на метод обновления пользователя. Если кэшированные данные Ajax не истек, не будут отправлены запросы на получение получения запросов. Он будет считывать данные непосредственно из кэша, и из httpwatch это результат (кэш). Следующее рисунок состоит в том, чтобы нажать F5, чтобы обновить, если кэш не истек по IE:
Даже если он вынужден обновляться через CTRL+F5, данные, полученные через AJAX, будут считываться из кеша:
Это означает, что что -либо, полученное через AJAX, не будет обновляется в соответствии с IE, если оно не истек - даже если вы используете Ctrl+F5, чтобы заставить обновить. Единственный способ убедиться, что вы получили последние данные, - это вручную очистить кэш. Вы можете использовать панель инструментов httpwatch:
Обратите внимание, что результат кэша и результат 304 разные. Кэш на самом деле 200 (кэш), 304 означает 304. Кэш фактически не отправляет запрос на сервер. Вы можете видеть из Chrome, что его время 0, а ответ также пуст. Однако 304 отличается.
Запрос 304 - это условный запрос, инициированный браузером. Этот запрос содержит заголовок запроса IF-модифицированного. Если файл не был изменен после того, как браузер отправит время, сторона сервера вернет статус 304 и сообщит браузеру использовать свой локальный контент кэша. Это не так быстро, как запрос отправляется на сторону сервера, но сторона сервера не отправляет данные.
Вы можете проверить домашнюю страницу Taobao, которая имеет 200 (кэш) и 304. Вы можете проверить их различия.
Суммировать:
Мы все знаем, что основная причина, по которой Ajax может увеличить скорость загрузки страницы, заключается в том, что он уменьшает загрузку дубликатов данных через AJAX и действительно достигает приобретения по требованию. Поскольку это так, когда мы пишем программу AJAX, мы могли бы также отправить ее на Запад и снова кэшировать ее на клиенте, чтобы еще больше улучшить скорость загрузки данных. То есть кэшировать данные в памяти браузера при загрузке данных. После загрузки данных, пока страница не обновляется, данные будут кэшированы в памяти навсегда. Когда пользователь снова просматривает данные, нет необходимости получать данные с сервера, что значительно уменьшает нагрузку сервера и улучшает опыт пользователя.