мы можем принудительно очистить кеш браузера через некоторый код - PullRequest
4 голосов
/ 31 марта 2011

У нас есть проект с интенсивным статическим ресурсом, чтобы ускорить загрузку страницы, мы много использовали кеширование браузера.Теперь проблема, с которой мы сталкиваемся, заключается в том, что каждый раз мы обновляем статический контент css или js.Пользователь жалуется на некоторые проблемы.Я понимаю, что пользователь может очистить кеш вручную и получить нужные данные.Но не может быть, чтобы, когда идет обновление файла.Он загружает новую версию себя мы используем php с wamp.

Ответы [ 4 ]

3 голосов
/ 31 марта 2011

Во-первых, это зависит от того, как долго вы отправляли заголовок expires в течение дня? Неделю? Месяц

Независимо от того, когда вы установили заголовок expires, вы должны подождать, пока это время истечет, прежде чем браузер даже начнет связываться с сервером для получения новой версии. Таким образом, вам придется изменить URL , как указали другие.

Однако есть еще один хороший вариант для вас, для будущего ...

Если вы установили 'cache-control: "no-cache, must-revalidate"' и короткое время Expires, браузер будет проверять сервер каждый раз, когда захочет повторно отобразить кэшированный объект , используя для отправки заголовок запроса "If-Modified-Since" последняя отметка времени, которую ваш сервер первоначально отправил с этим кэшированным объектом в своем заголовке ответа «Last-Modified». Если объект был обновлен с момента отметки времени, отправленной клиентом, сервер отправит новый объект и новый заголовок отметки времени Last-Modified . Если нет, он ответит только заголовком ответа «304-Not Modified».

Таким образом, преимущество повторной проверки заключается в том, что вы все еще сохраняете некоторую полосу пропускания с небольшим риском того, что клиент показывает «устаревшие» объекты, но недостатком является то, что клиент должен ждать, пока ваш сервер проверяет заголовок клиента If-Modified-Since временная метка файла «Last-Modified» и, конечно, сервер должен на самом деле проверить файловую систему, чтобы получить это время «Last-Modified». Поэтому все, что сохраняется, - это фактическая пропускная способность и время передачи контента


Хорошие ресурсы для чтения :

2 голосов
/ 31 марта 2011

Самый быстрый и простой способ заставить пользователя перезагрузить статический ресурс - добавить к нему параметр строки запроса, например, если ваш сценарий

<script type="text/javascript" src="myscript.js"></script>

Нужны ли пользователи для его перезагрузки?Добавить ?v=2

<script type="text/javascript" src="myscript.js?v=2"></script>

Обновлен ли он снова?

<script type="text/javascript" src="myscript.js?v=3"></script>

и т. Д.

0 голосов
/ 31 марта 2011

Вы можете использовать трюк, чтобы заставить браузер загружать более новые версии файлов css / js.

Если ваш файл называется "layout.css" (или "common.js"), то синтаксис для включения файла будет

<link rel="stylesheet" href="/layout.css">

Умная часть - добавить строку запроса в конец имени файла, например,

<link rel="stylesheet" href="/layout.css?version=1">

Так что каждый раз, когда вы меняете свои файлы js / css - добавьте строку запроса, отличную от той, которая была там ранее (на мой взгляд, лучший способ - увеличивать номер версии каждый раз, когда вы что-то меняете).

0 голосов
/ 31 марта 2011

Вы можете заставить пользователя заново загружать статические файлы, просто переименовывая их, или многие люди добавляют метку времени к запросу с последним обновленным временем, например:

<img src="logo.png?212312313"/>

Каждый раз, когда это изменяется, пользователь повторно загружает новый файл.Это может быть автоматизировано на стороне сервера, проверяя время изменения файла или просто добавляя случайную строку (возможно, номер версии?) Вручную.

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