Изменения, внесенные в файл js, файл представлений или файл css, не отражаются для пользователя.

Я разработал одностраничное веб-приложение с несколькими представлениями. Для рендеринга этих представлений использовался ng-if.

Каждое представление имеет отдельный контроллер. Многие функции кликов были обработаны с помощью Jquery. Для бэкэнда использовалась java. Все приложение было разработано в spring MVC и развернуто в WebLogic.

Проблема заключается в том, что всякий раз, когда я вношу какие-либо изменения в представления или файл js, они не отражаются после развертывания нового файла WAR без очистки кеша и выполнения аппаратного обновления(ctrl+F5/R).

Несколько минут назад я получил ответ на этот вопрос, который был связан с ServiceWorker и appCache, но его больше нет в списке ответов. Кто-нибудь знает об этом?

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

Я пытался предоставить версию, когда включаю ее в index.jsp, например (filename.js?version=2.1). Но это не работает для меня. Я не проверял это в chrome или любом другом браузере, так как мне и пользователям доступны только IE10, edge.


person Praveen Kumar    schedule 28.06.2019    source источник
comment
Возможный дубликат как обеспечить управление версиями для файлов css, js, jsp   -  person georgeawg    schedule 29.06.2019
comment
См. раздел Аннулирование и обновление кэшированных ответов developers.google.com/. веб/основы/производительность/. Там предлагается изменить имя файла. Добавление случайной строки запроса работало для меня в прошлом, хотя вы говорите, что это не работает.   -  person Alan Hay    schedule 01.07.2019


Ответы (1)


Добавление запроса в конец импортированного JS-файла работает только на клиентском языке.
Если вы используете JSP-файл, вы можете добавить это в начало вашего файла, это отключит кеширование.

<%
response.setHeader("Cache-Control","no-cache"); 
response.setHeader("Pragma","no-cache"); 
response.setDateHeader("Expires", -1);
%>

Для IE вам нужно добавить эти теги HTML:

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
<META HTTP-EQUIV="Expires" CONTENT="-1">

Вы можете указать срок действия файла в response.setDateHeader("Expires", -1);
См. это для получения дополнительной информации

person Toothgip    schedule 28.06.2019
comment
как вы предложили, это отключит кеширование, но замедлит работу приложения, так как каждый раз оно будет загружать включенные файлы. Не так ли? - person Praveen Kumar; 28.06.2019
comment
Да, но в setDateHeader можно указать дату истечения срока действия. См. docs.oracle.com/cd/E13158_01/alui. /wci/docs103/devguide/ для получения дополнительной информации. - person Toothgip; 28.06.2019