Как очистить кэш браузера при запуске обновленной версии приложения?

#angularjs #tomcat #web-applications #gruntjs #browser-cache

#angularjs #tomcat #веб-приложения #gruntjs #браузер-кэш

Вопрос:

Я развертываю свое приложение пользовательского интерфейса, которое состоит из AngularJS, Grunt и других элементов пользовательского интерфейса.

Всякий раз, когда я обновляю свой пользовательский интерфейс и повторно развертываю его с помощью apache-tomcat, браузер всегда получает мои ресурсы из кэша. (Поскольку путь к новым ресурсам, таким как css, html, одинаковый)

Пользователю необходимо нажать CTRL F5 (жесткая перезагрузка), чтобы очистить кеш и использовать новые ресурсы.

Как я могу заставить браузер очистить кеш при повторном развертывании приложения?

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

Я не хочу обновлять управление версиями своих файлов каждый раз при повторном развертывании продукта. Поскольку мои файлы также загружают много HTML-файлов.

Так или иначе, я хочу очистить только кеш браузера.

Спасибо!

Комментарии:

1. Начните с отключения кэша на index.html используя http-заголовки и добавляя какой-нибудь плагин ~ cache-bust что-нибудь, чтобы добавить хэши ко всем вашим ресурсам.

Ответ №1:

Вы не можете обновить кеш без управления версиями имен файлов. Но вам не обязательно делать это вручную. Если вы используете Grunt, просто ознакомьтесь с некоторыми пакетами npm. Например, такой: https://www.npmjs.com/package/grunt-cache-breaker

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

Комментарии:

1. Да, это 1 часть моего решения. Но мы предоставили нашим клиентам возможность переопределять изображение / css из пользовательского интерфейса. Так что в этом случае grunt не сможет выполнять мои задачи. Кстати, я исправил проблему с помощью Etag. См.: developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag

Ответ №2:

Вы можете добавить версию в свои HTML-файлы

 app.factory('preventTemplateCache', function () {
    return {
        'request': function (config) {
            if (config.url.indexOf('partials') !== -1) {
                config.url = config.url   '?t='   101;
            }
            return config;
        }
    }
})
  

а также указать версию файлов .js как

  <script src='app.js?v=101'></script>
  

101 — номер версии

Комментарии:

1. здесь ‘partials’ — это папка, содержащая HTML-файлы

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

3. Чем это будет сложно управлять, у меня есть сотни файлов html и js.

4. добавьте приведенный выше код в свой app.js это даст версию для всего html, а для файлов js вам просто нужно заменить версию всех файлов на новую версию, которую вы можете найти и заменить любым редактором, таким как vscode или sublime.