Я отправляю AJAX GET-запросы в PHP-приложение и хотел бы кэшировать возвращаемые запросы для последующего использования.
Поскольку я использую GET, это должно быть возможно, потому что разные запросы запрашивают разные URL-адреса (например, getHTML.php? Page = 2 и getHTML.php? Page = 5).
Какие заголовки мне нужно объявить в PHP-приложении, чтобы обеспечить правильное использование кэша URL-адресов клиентов браузером браузера? Мне нужно объявить что-либо в Javascript, который обрабатывает AJAX-запрос (я использую функцию $ .ajax jQuery, у которой есть параметр кэша)?
Как я могу обрабатывать изменения, которые изменяют содержимое, например, getHTML.php? Page = 2, чтобы клиент не возвращался в кешированную версию? Добавление другого параметра в запрос GET, например getHTML.php? Page = 2 & version = 2, невозможно, потому что ссылка на запрошенный URL создается автоматически без какой-либо проверки (что предпочтительнее, чем я хочу, чтобы она была).
Как браузер реагирует при попытке AJAX-запросить URL-адрес кэшированного запроса? Сможет ли AJAX-запрос немедленно вернуться к успеху?
благодаря
Willem
Добавьте на сервер следующие заголовки:
header("Cache-Control: private, max-age=$seconds"); header("Expires: ".gmdate('r', time()+$seconds));
Где $ seconds имеет очевидный смысл.
Кроме того, проверьте, нет ли на вашем сервере каких-либо других заголовков анти-кэширования, таких как Pragma. Если это так, добавьте заголовок Pragma: cache.
Как только вы обновите страницу, вы все равно будете делать серверные вызовы для контента, даже если вы уже запрашивали их. Заголовки PHP не помогут вам.
Я думаю, что вам нужен механизм кэширования на стороне клиента, уже запрошенный с сервера на текущей странице.
В этом случае вы можете использовать хеш-таблицу в JavaScript и запросить, прежде чем делать вызов на сервер. Это улучшит работу пользователей, так как пользователю не придется ждать другого запроса контента, который он уже видел.
Вот пример:
//placeholder for hash table as cache var cache = []; var getPage = function(pageNr){ if(cache[pageNr]){ //content is already in cache, use it from there handleContent(cache[pageNr]); } else{ //object with parameteres sent with GET request var params = {}; params.page = pageNr; $.ajax({ url: "getHTML.php", data: params, cache: false, success: function(response){ //handle your response here handleContent(response); //store the response in the cache for later use cache[pageNr] = response; } }); } };
Теперь запрашивающие страницы сначала будут искать в текущем кеше, чтобы узнать, есть ли у вас контент. Если нет, это заставит сервер вызывать и сохранять ответ в кеше.
Он похож на пользовательский опыт при прокрутке новостей в Google Finance
Обратите внимание: если вы обновите страницу, этот кеш будет удален.
В случае внесения изменений на страницу вам придется использовать ссылки Мориса Перри на Yahoo Exceptional Performance, чтобы гарантировать, что ваш сервер всегда возвращает вашу последнюю версию контента.
Подробнее о хэш-таблицах в JavaScript: http://www.mojavelinux.com/articles/javascript_hashes.html