window.applicationCache обновляет блокировку браузера - как уменьшить их частоту или заставить их инициироваться пользователем - PullRequest
5 голосов
/ 04 мая 2011

Я создал веб-приложение, которое кэширует весь необходимый код и данные для использования в автономном режиме через applicationCache.Однако каждый раз, когда приложение запускается, оно сразу же пытается проверить наличие обновлений.Это блокирует браузер на значительную часть времени, даже если он не находит ничего для обновления.Такое поведение очень разрушительно для приложения (не следует ли обновлять в фоновом режиме, в любом случае?).Просто этап проверка занимает много времени на мобильном устройстве, и если он находит обновления, все ставки отключаются относительно того, сколько времени займет загрузка (b / c он должен повторно загрузить все файлы) - что такжезависает браузер

Итак, мне интересно:

  1. Есть ли способ делегировать обновления applicationCache общему веб-работнику?ИЛИ
  2. Есть ли способ заблокировать все обновления applicationCache до тех пор, пока пользователь не захочет проверить наличие обновлений и не нажмет кнопку, которая будет запускать обновления через applicationCache.update ()?ИЛИ
  3. Существуют ли другие способы уменьшить время, затрачиваемое на проверку обновлений?
  4. Разве обновления кэша приложений не должны выполняться асинхронно в фоновом режиме?



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


ОБНОВЛЕНИЕ

Хорошо, я играл с заголовками, и ничего не помогло.Я начинаю щедрость.Если вы можете помочь, пожалуйста, сделайте!

Ответы [ 2 ]

1 голос
/ 30 мая 2011

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

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

http://www.html5rocks.com/tutorials/appcache/beginner/#toc-updating-cache

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

0 голосов
/ 08 сентября 2011

Метод abort () может быть ответом ... когда-нибудь , но я еще не встречал браузеров, которые его реализуют.

У меня была похожая проблема, и я попробовал все, включая дикую идею поместить манифест внутрь себя, чтобы посмотреть, кешируется ли он сам. Так что я мог бы делать обновления вручную с помощью запросов ajax и оценки javascript, вставленного в localStorage ... yikes.

Наконец, я создал очень простую HTML-страницу с простым манифестом. Когда я проверял это, пользовательский интерфейс не блокировался. Постепенно я начал добавлять вещи на страницу и поиграться с содержимым манифеста, чтобы увидеть, что может вызвать его зависание во время проверки applicationCache. Я наконец-то потерпел неудачу, когда добавил изображение на страницу, но оставил его вне манифеста - тогда пользовательский интерфейс снова начал блокироваться. Я вернулся к своему первоначальному проекту и нашел несколько изображений, которые должны были быть в манифесте, и это также исправило проблему с пользовательским интерфейсом блокировки.

На этапе проверки applicationCache пытается быть асинхронным (по крайней мере, на устройствах, которые я тестировал). Однако если в манифесте отсутствуют какие-либо файлы, то все должно ждать, пока applicationCache завершит проверку .

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

Чтобы найти файлы, которые необходимо добавить в манифест, просмотрите журналы сервера, когда вы обновите приложение несколько раз. Подозреваемыми будут любые запросы GET на файлы, отличные от манифеста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...