Я использую Scripts.Render () в ASP.NET MVC - что может быть причиной того, что через 6 часов после обновления пользователи все еще получают старый (связанный) файл сценария? - PullRequest
0 голосов
/ 18 мая 2018

Я обновил некоторые скрипты в наших файлах TypeScript, но пользователи все еще, кажется, получают старые версии связанного скрипта. Откуда мне знать? Потому что я вижу (удаленные) ошибки JavaScript в наших журналах, которые ссылаются на класс, который на 100% существует в новой последней версии. Это было более 6 часов назад, и я могу убедиться, что ?={hash} изменился.

У меня такое ощущение, что подозреваемые, так или иначе, могут использовать одно из следующих:

  • Статическое содержимое (IIS)
  • Scripts.Render ( "")
  • компиляция TypeScript
  • Azure

У меня такое ощущение, что он находится в каком-то кеше или связан с обработкой статического контента. Или с помощью Script.Render ().

В чем может быть причина? Это сводит меня с ума, потому что я знаю, что сайт не работает для некоторых пользователей, но я не могу исправить ситуацию.

Я включил заголовки ниже.

headers

Это код пакета. Обратите внимание, что core.js генерируется TypeScript.

{
    var bundle = new Bundle("~/scripts/main-bundle");
    bundle.IncludeDirectory("~/scripts/fork", "*.js", searchSubdirectories : true );
    bundle.IncludeDirectory("~/scripts/app", "*.js", searchSubdirectories : true );
    bundle.Include("~/scripts/bundles/core.js");
    bundles.Add( bundle );
}

Обновление

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

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

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

Затем вы управляете манифестом в коде.со слушателями для updateReady и завершены, чтобы вы знали, когда обновлять браузер.

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

С обоими приложениями у вас будет график выпуска, которым вы сможете управлять и устранять проблемы, подобные тем, которые возникали на данный момент.

Другой способ, если у вас есть API, - это разрешитьAPI для обслуживания Javascript, основанный на заданном номере версии для текущего веб-интерфейса пользователя.Таким образом, вы сможете информировать пользователей о том, что более свежая версия обновлена, и предлагать кнопку перезагрузки.

Однако кэш приложений через манифест или сервисных работников более доступен для других команд, если у вас естьнастройка split, front end и backend.

+++++++++++++++++++++

Еще одна причина, может быть, потому что ваш вебшрифт блокируется рекламными блокировщиками, такими как Ghostery и AdGuard.Это, в свою очередь, создает необработанную ошибку

auth-dialog-window?openerOrigin=https%3a%2f%2fpoules.com&color=FF533C&pool=&openerType=iframe:82 Uncaught ReferenceError: WebFont is not defined
at auth-dialog-window?openerOrigin=https%3a%2f%2fpoules.com&color=FF533C&pool=&openerType=iframe:82

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

Если честно, при взгляде на это вполне могут быть блокировщики рекламы, которыеВаша главная проблема здесь.

В любом случае, надеюсь, все это поможет

0 голосов
/ 25 мая 2018

Даже если хэш-бомба остается прежней, файлы ресурсов / пакетов истекают в своем собственном темпе, но только через день;на момент написания статьи я вижу следующие даты

Date: Fri, 25 May 2018 17:11:21 GMT
Expires: Sat, 25 May 2019 17:11:22 GMT

Если вы обновите свой основной пакет в пятницу 18:00:00, его можно будет использовать только после субботы 17:11:22.Я также заметил, что вы смешиваете публичный и приватный кеш-хранилища;кэшируя пакеты публично, любой прокси-сервер (если он задействован) поддерживает свой собственный кеш, который может обслуживать браузер, что также может привести к задержке.

Есть ли возможность не кэшировать ваши веб-страницытак что хэш-бомба всегда актуальна?

Я также обычно сервер свои ресурсы без кэширования, но с заголовком Last-Modified, что гарантирует, что браузеры по крайней мере делает запрос для каждого ресурса, предоставляя If-Заголовок Modified-Since, на который IIS отвечает кодом состояния 304, если нет изменений (чтобы байты не передавались по проводам).

0 голосов
/ 21 мая 2018

https://poules.com/us не имеет cache-control:max-age, поэтому у вас, вероятно, есть пользователи в кэшированном html-браузере, которые будут использовать старые сценарии.

Существует набор s-maxage, ноэто только переопределение для public кеша max-age, который не установлен, и для этого кеша страниц установлено значение private;так что я не думаю, что это что-то делает.

Также вы можете проверить Azure, чтобы увидеть, что развернуто, если у вас есть доступ к порталу Azure.

...