В настоящее время мы работаем над частной бета-версией и все еще в процессе внесения довольно быстрых изменений, хотя очевидно, что по мере того, как использование начинает расти, мы будем замедлять этот процесс. При этом одна из проблем, с которой мы сталкиваемся, заключается в том, что после выпуска обновления с новыми файлами JavaScript клиентские браузеры по-прежнему используют кэшированную версию файла и не видят обновления. Очевидно, что при обращении в службу поддержки мы можем просто сообщить им об ctrlF5обновлении, чтобы убедиться, что они получают самые свежие файлы с сервера, но было бы предпочтительнее обработать это до этого времени.
Наша текущая идея состоит в том, чтобы просто прикрепить номер версии к имени файлов JavaScript, а затем, когда будут внесены изменения, увеличить версию сценария и обновить все ссылки. Это определенно делает свою работу, но обновление ссылок на каждый релиз может быть громоздким.
Поскольку я уверен, что мы не первые, кто имеет дело с этим, я решил, что я выброшу это сообществу. Как вы гарантируете клиентам обновление своего кэша при обновлении кода? Если вы используете метод, описанный выше, вы используете процесс, который упрощает изменение?
источник
Ответы:
Насколько я знаю, общим решением является добавление
?<version>
ссылки на скрипт src.Например:
Может быть, у вас есть система контроля версий? Большинство систем контроля версий имеют способ автоматически вводить номер редакции, например, при регистрации.
Это будет выглядеть примерно так:
Конечно, всегда есть лучшие решения, подобные этому .
источник
foo.js?1
это не то же самое имяfoo.js?2
, поэтому браузер будет думать, что это два разных файла. Недостатком является то, что оба файла будут одновременно существовать в кеше пользователя, занимая ненужное место.Добавление текущего времени к URL-адресу - действительно распространенное решение. Однако вы также можете управлять этим на уровне веб-сервера, если хотите. Сервер может быть настроен на отправку различных заголовков HTTP для файлов JavaScript.
Например, чтобы принудительно кэшировать файл не более 1 дня, вы должны отправить:
Для бета-версии, если вы хотите, чтобы пользователь всегда получал последнюю версию, вы должны использовать:
источник
Google Page-Speed: не включайте строку запроса в URL для статических ресурсов. Большинство прокси-серверов, особенно Squid, работающий до версии 3.0, не кэшируют ресурсы с "?" в их URL, даже если в ответе присутствует заголовок Cache-control: public. Чтобы включить кэширование прокси для этих ресурсов, удалите строки запросов из ссылок на статические ресурсы и вместо этого закодируйте параметры в сами имена файлов.
В этом случае вы можете включить версию в URL ex: http://abc.com/ v1.2 /script.js и использовать apache mod_rewrite, чтобы перенаправить ссылку на http://abc.com/script.js . Когда вы меняете версию, клиентский браузер обновит новый файл.
источник
Этот ответ запаздывает только на 6 лет, но я не вижу его во многих местах ... HTML5 представил кэш приложений, который используется для решения этой проблемы. Я обнаружил, что новый серверный код, который я писал, ломал старый javascript, хранящийся в браузерах людей, поэтому я хотел найти способ истечь их javascript. Используйте файл манифеста, который выглядит следующим образом:
и генерируйте этот файл с новой отметкой времени каждый раз, когда вы хотите, чтобы пользователи обновляли свой кэш. В качестве примечания, если вы добавите это, браузер не перезагрузится (даже когда пользователь обновит страницу), пока манифест не сообщит об этом.
источник
?<version>
подход.Как насчет добавления размера файла в качестве параметра загрузки?
Поэтому каждый раз, когда вы обновляете файл, параметр filever изменяется.
Как насчет того, когда вы обновляете файл и ваши результаты обновляются в том же размере? Каковы шансы?
источник
Не все браузеры кэшируют файлы с помощью «?» в этом. То, что я сделал, чтобы убедиться, что оно было максимально кэшировано, я включил версию в имя файла.
Поэтому вместо того
stuff.js?123
, я сделалstuff_123.js
Я использовал
mod_redirect
(я думаю) в apachehave stuff_*.js
чтобы ехатьstuff.js
источник
.htaccess
код в свой ответ для дальнейшего использования.Для страниц ASP.NET я использую следующее
ПЕРЕД
ПОСЛЕ (принудительная перезагрузка)
Добавление DateTime.Now.Ticks работает очень хорошо.
источник
Для ASP.NET я предполагаю следующее решение с расширенными настройками (режим отладки / выпуска, версии):
Файлы Js или Css включены таким образом:
Global.JsPostfix и Global.CssPostfix вычисляются в Global.asax следующим образом:
источник
В настоящее время обычной практикой является создание хеш-кода содержимого как части имени файла, чтобы браузер, особенно IE, перезагружал файлы javascript или css.
Например,
поставщик. a7561fb0e9a071baadb9 .js
main. b746e3eb72875af2caa9 .js
Обычно это работа для инструментов сборки, таких как webpack. Вот более подробная информация, если кто-то хочет попробовать, если вы используете веб-пакет.
источник
Если вы генерируете страницу, которая ссылается на файлы JS, простое решение - добавить метку времени последнего изменения файла к сгенерированным ссылкам.
Это очень похоже на ответ Хаппи, но работает в системах контроля версий без подстановки ключевых слов. Это также лучше, чем добавлять текущее время, так как это предотвратит кэширование, даже если файл не изменился вообще.
источник
Функция jQuery getScript также может быть использована для гарантии того, что файл js действительно загружается при каждой загрузке страницы.
Вот как я это сделал:
Проверьте функцию на http://api.jquery.com/jQuery.getScript/
По умолчанию $ .getScript () устанавливает для параметра кэша значение false. Это добавляет параметр запроса с меткой времени к URL запроса, чтобы браузер загружал скрипт каждый раз, когда его запрашивают.
источник
В PHP :
В HTML :
Как это работает:
В HTML напишите
filepath
и имя так, как вы хотите, но только в функции. PHP получаетfiletime
файл и возвращаетfilepath+name+"?"+time
последнее изменениеисточник
Мы создавали SaaS для пользователей и предоставляли им сценарий для встраивания на страницу их веб-сайта, и было невозможно прикрепить версию со сценарием, поскольку пользователь будет прикреплять сценарий к своему веб-сайту для функциональности, и я не могу заставить их менять версию каждый раз, когда мы обновляем скрипт
Итак, мы нашли способ загружать более новую версию скрипта каждый раз, когда пользователь вызывает оригинальный скрипт
предоставленная пользователю ссылка на скрипт
файл сценария
Объяснение:
Пользователь прикрепил предоставленный им сценарий на своем веб-сайте, и мы проверили, существует ли уникальный токен, прикрепленный к сценарию, или нет с помощью селектора jQuery, а если нет, то динамически загрузите его с новым токеном (или версией).
Это дважды вызывает один и тот же сценарий, что может быть проблемой производительности, но это действительно решает проблему принудительной загрузки сценария из кэша без указания версии в фактической ссылке сценария, предоставленной пользователю или клиенту.
источник
В asp.net mvc вы можете использовать @ DateTime.UtcNow.ToString () для номера версии файла js. Номер версии автоматически меняется с датой, и вы заставляете браузер клиентов автоматически обновлять файл js. Я использую этот метод, и это хорошо работает.
источник
location.reload (истина);
см. https://www.w3schools.com/jsref/met_loc_reload.asp
Я динамически вызываю эту строку кода, чтобы гарантировать, что javascript был повторно получен с веб-сервера, а не из кэша браузера, чтобы избежать этой проблемы.
источник
onload="location.reload();"
мою форму позволяет мне получить новый JS после обновления, а не перезапускать мою страницу. Это гораздо более элегантное решение. Спасибо!Одним из решений является добавление строки запроса с отметкой времени в URL при получении ресурса. Это использует тот факт, что браузер не будет кэшировать ресурсы, извлеченные из URL-адресов со строками запроса в них.
Вы, вероятно, не хотите, чтобы браузер вообще не кэшировал эти ресурсы; более вероятно, что вы хотите, чтобы они кэшировались, но вы хотите, чтобы браузер получал новую версию файла, когда он станет доступен.
Наиболее распространенным решением, по-видимому, является добавление метки времени или номера редакции в само имя файла. Это немного больше работы, потому что ваш код должен быть изменен, чтобы запросить правильные файлы, но это означает, что, например, версия 7 вашей
snazzy_javascript_file.js
(то естьsnazzy_javascript_file_7.js
) кэшируется в браузере, пока вы не выпустите версию 8, а затем ваш код изменится на получитьsnazzy_javascript_file_8.js
вместо этого.источник
Преимущество использования
file.js?V=1
над afileV1.js
заключается в том, что вам не нужно хранить несколько версий файлов JavaScript на сервере.Проблема, с которой я сталкиваюсь,
file.js?V=1
заключается в том, что у вас может быть зависимый код в другом файле JavaScript, который ломается при использовании новой версии библиотечных утилит.Ради обратной совместимости, я думаю, что гораздо лучше использовать
jQuery.1.3.js
для ваших новых страниц и позволить использовать существующие страницыjQuery.1.1.js
, пока вы не будете готовы обновить старые страницы, если это необходимо.источник
Используйте
GET
переменную версии для предотвращения кэширования браузера.Добавление
?v=AUTO_INCREMENT_VERSION
до конца вашего URL предотвращает кеширование браузера - избегая любых и всех кэшированных скриптов.источник
Мой коллега только что нашел ссылку на этот метод сразу после того, как я опубликовал (со ссылкой на css) по адресу http://www.stefanhayden.com/blog/2006/04/03/css-caching-hack/ . Приятно видеть, что другие используют это, и это, кажется, работает. Я предполагаю, что на данный момент нет лучшего способа, чем найти-заменить, чтобы увеличить эти "номера версий" во всех тегах сценария?
источник
Несмотря на то, что это специфичная для фреймворка, Django 1.4 имеет эту функцию, которая работает аналогично ссылке на сайт «greenfelt» в ответе выше.
источник
Очистка кэша в ASP.NET Core с помощью помощника по тегам поможет вам в этом и позволит вашему браузеру сохранять кэшированные сценарии / css до тех пор, пока файл не изменится. Просто добавьте вспомогательный тег asp-append-version = "true" в тег сценария (js) или link (css):
Дэйв Paquette есть пример хорошего и объяснение кэша перебора здесь (внизу страницы) Кэш Разорение
источник
Самое простое решение? Не позволяйте браузеру кешировать вообще. Добавить текущее время (в мс) в качестве запроса.
(Вы все еще в бета-версии, так что вы можете обоснованно не оптимизировать производительность. Но YMMV здесь.)
источник
Один простой способ. Изменить htaccess
источник
Ниже работало для меня:
источник