#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.