Как заставить клиентов обновить файлы JavaScript?

Предполагая, что вы не можете использовать INotifyPropertyChanged, потому что вы привязываетесь ко всему объекту, вам нужно вызвать BindingExpression.UpdateTarget .

. Небольшая тонкость находится в процессе захвата связывающее выражение. Это требует от вас достаточно глубокого знания представления: насколько я знаю, единственный способ сделать это - вызвать BindingOperations.GetBindingExpression , передав элемент управления и свойство, привязка которого вы хотите обновить , например:

BindingOperations.GetBindingExpression(myImage, Image.SourceProperty).UpdateTarget();

551
задан Jason Plank 3 August 2011 в 19:04
поделиться

9 ответов

Насколько я знаю, что общее решение должно добавить ?<version> к ссылке src сценария.

, Например:

<script type="text/javascript" src="myfile.js?1500"></script>
<час>

я предполагаю в этой точке, что нет лучшего пути, чем находить-замена для постепенного увеличения этих "номеров версий" во всех тегах script?

у Вас могла бы быть система управления версиями, делают это для Вас? Большинство систем управления версиями имеет способ автоматически ввести число пересмотра на регистрации, например.

Это выглядело бы примерно так:

<script type="text/javascript" src="myfile.js?$REVISION$"></script>
<час>

, Конечно, всегда существуют лучшие решения как этот .

498
ответ дан Marco Bonelli 3 August 2011 в 19:04
поделиться

Простое решение? Не позволяйте кэшу браузера вообще. Добавьте текущее время (в мс) как запрос.

(Вы все еще в бета-версии, таким образом, Вы могли сделать разумный случай для того, чтобы не оптимизировать для производительности. Но YMMV здесь.)

0
ответ дан pcorcoran 3 August 2011 в 19:04
поделиться

Если Вы генерируете страницу, которая связывается с файлами JS, простое решение добавляет метку времени последнего изменения файла к сгенерированным ссылкам.

Это очень похоже на ответ Huppie, но работает в системах управления версиями без замены ключевого слова. Это также лучше, чем добавляют текущее время, так как это предотвратило бы кэширование, даже когда файл не изменился вообще.

4
ответ дан 3 August 2011 в 19:04
поделиться

Добавление текущего времени к URL является действительно общим решением. Однако можно также управлять этим на уровне веб-сервера, если Вы хотите. Сервер может быть настроен для отправки различных HTTP-заголовков за файлами JavaScript.

, Например, чтобы вынудить файл, который не будет кэшироваться для больше, чем 1 день, Вы отправили бы:

Cache-Control: max-age=86400, must-revalidate

Для беты, если бы Вы хотите вынудить пользователя всегда получить последнее, Вы использовали бы:

Cache-Control: no-cache, must-revalidate
82
ответ дан Chase Seibert 3 August 2011 в 19:04
поделиться

Не все файлы кэша браузеров с '?' в нем. Что я сделал, чтобы удостовериться, что это кэшировалось как можно больше, я включал версию в имя файла.

Так вместо stuff.js?123, я сделал stuff_123.js

, я использовал mod_redirect (я думаю) в апаче к к have stuff_*.js для движения stuff.js

18
ответ дан Aliaksandr Sushkevich 3 August 2011 в 19:04
поделиться

Одно решение состоит в том, чтобы добавить строку запроса с меткой времени в нем к URL при выборке ресурса. Это использует в своих интересах то, что браузер не будет кэшировать ресурсы, выбранные от URL со строками запроса в них.

Вы, вероятно, не хотите, чтобы браузер не кэшировал эти ресурсы вообще хотя; более вероятно, что Вы хотите их кэшируемый, но Вы хотите, чтобы браузер выбрал новую версию файла, когда это сделано доступным.

наиболее распространенное решение, кажется, для встраивания числа метки времени или пересмотра в само имя файла. Это - немного больше работы, потому что Ваш код должен быть изменен для запроса корректных файлов, но это означает, что, например, версия 7 Вашего snazzy_javascript_file.js (т.е. snazzy_javascript_file_7.js) кэшируется на браузере до Вас версия выпуска 8, и затем Ваш код изменяется на выборку snazzy_javascript_file_8.js вместо этого.

1
ответ дан Richard Turner 3 August 2011 в 19:04
поделиться

Мой коллега просто нашел ссылку на тот метод прямо после того, как я отправил (в отношении css) в http://www.stefanhayden.com/blog/2006/04/03/css-caching-hack/ . Хороший, чтобы видеть, что другие используют его и это, кажется, работает. Я предполагаю в этой точке, что нет лучшего пути, чем находить-замена для постепенного увеличения этих "номеров версий" во всех тегах script?

1
ответ дан Lightness Races in Orbit 3 August 2011 в 19:04
поделиться

(верный) location.reload;

видят https://www.w3schools.com/jsref/met_loc_reload.asp

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

2
ответ дан 22 November 2019 в 22:11
поделиться

The advantage of using a file.js?V=1 over a fileV1.js is that you do not need to store multiple versions of the JavaScript files on the server.

The trouble I see with file.js?V=1 is that you may have dependant code in another JavaScript file that breaks when using the new version of the library utilities.

For the sake of backwards compatibility, I think it is much better to use jQuery.1.3.js for your new pages and let existing pages use jQuery.1.1.js, until you are ready to upgrade the older pages, if necessary.

0
ответ дан 22 November 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: