Избегайте кэширования Javascript / Css - PullRequest
0 голосов
/ 10 мая 2018

Я много об этом искал, но не могу найти никакого решения, которое действительно работает: мы создаем веб-приложение, используя множество файлов javascript / css, которые изменяются в любое время.Дело в том, что нам нужно, чтобы браузер клиента всегда получал последнюю версию скрипта.

Мы пытались добавить запрос GET (? V = CurrentDate), но браузер продолжает загружать старый скрипт, пока вы не нажмете «Обновить».несколько раз или выполните CTRL + F5.

Одна вещь, которую мы хотим избежать, - это хранить эти файлы в разных папках, таких как /scripts/v1.0/, а затем /scripts/v2.0/...

Мы используем ASP.NET MVC 5, Bootstrap и JQuery.Одна важная вещь: мы хотим избежать только некоторых сценариев / кэширования CSS, а не всего.

Я очень ценю вашу помощь!Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Кэширование браузера - это возможность браузера сохранять результаты с удаленных ресурсов. Процесс довольно простой: он запоминает url, из которого был запрошен ресурс, и ответ. Если, пока ресурс кэшируется, ресурс запрашивается снова, а не выполняется вызов, браузер обслуживает сохраненную копию из кэша, так как экономит пропускную способность и время.

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

Как правило, timestamp в секундах (метка времени php) или в миллисекундах (метка времени javascript) гарантирует, что ваш ресурс всегда будет перезагружен:

JavaScript:

<script src id="myScript"></script>
<script type="text/javascript">
   // change path to match your file:
   let resourcePath = '/js/someScript.js';

   document.getElementById('myScript').src = resourcePath + '?v=' + Date.now();
</script>

PhP:

<script src="/js/someScript.js?v=<?=time();?>"></script>

Примечание: вы можете сделать то же самое для любого другого ресурса (.css или медиаресурсов), чтобы отключить кэширование. Также обратите внимание, что технически вы не отключаете кэширование - это не так просто сделать, и оно отличается от браузера к браузеру. Вы разрешаете кэширование, но всегда запрашиваете другой ресурс, потому что у него есть фиктивный параметр, который постоянно меняется (и который можно переименовать из v во что угодно, например, в ?no-cache=).

0 голосов
/ 10 мая 2018

Добавить случайный запрос строку к src

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

<script src="test.js?version=1"></script>

Или, если вы используете язык на стороне сервера, вы можете автоматически сгенерировать это:

ASP.NET:

<script src="test.js?rndstr=<%= getRandomStr() %>"></script>

Более подробную информацию о кэш-очистке можно найти здесь:

https://curtistimson.co.uk/post/front-end-dev/what-is-cache-busting/

Редактировать

Ручной взлом (для Chrome и для локального тестирования)

Щелкните правой кнопкой мыши и осмотрите (или просто нажмите F12) страницу и перейдите к настройке, щелкнув затмения в правом верхнем углу и отметив параметр «Отключить кэш (когда открыт DevTools).

Но это работает только тогда, когда вы держите DevTool (Inspect Page) открытым во время тестирования.

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