Как автономный манифест/функциональность HTML5 будет работать с ASP.NET MVC 4?

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

Этот вопрос касается включения URL-адресов действий контроллера как в раздел CACHE манифеста, так и в раздел NETWORK.

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

Однако сегодня утром я прочитал следующее в Погружение в HTML5: давайте перенесем это в автономный режим:

Строка с пометкой NETWORK: является началом раздела «белый список онлайн». Ресурсы в этом разделе никогда не кэшируются и недоступны в автономном режиме. (Попытка загрузить их в автономном режиме приведет к ошибке.)

Итак, какая информация верна? Как поведет себя приложение, если я добавлю URL-адрес действия контроллера как в разделы CACHE, так и в разделы NETWORK?

У меня до сих пор работает очень простой и небольшой PoC, и вот что я заметил по этому вопросу:

  1. У меня есть действие контроллера, которое просто генерирует 4 случайных числа и устанавливает их в ViewBag, а представление будет отображать их в UL.

  2. Я вообще не использую кэширование вывода. Единственное кеширование происходит из файла манифеста.

  3. Перед добавлением атрибута manifest в html-тег моего Layout.cshtml каждый раз, когда я запрашивал представление, я каждый раз получал разные случайные числа, и срабатывала точка останова, установленная в действии контроллера.

  4. В первый раз, когда я запросил URL/представление после добавления атрибута манифеста, точка останова на контроллере сработала 3 раза (а не только 1 раз, как раньше). Это уже странно, и я задам отдельный вопрос об этом, я просто пишу его здесь для справки.

  5. После того, как манифест и ресурсы кэшируются (проверено просмотром окна консоли в Chrome Dev Tools), каждый раз, когда я запрашиваю View/URL, я получаю кешированную версию, и точка останова больше никогда не срабатывает.

Такое поведение заставляет меня поверить, что все, что находится в разделе CACHE, переопределит или проигнорирует все, что находится в разделе NETWORK, но, как я уже сказал (и причина, по которой я спрашиваю здесь), это потому, что я новичок в работе с этим, и я Я не уверен, так ли это должно работать, или я что-то упускаю или использую неправильно.

Любая помощь приветствуется

Вот соответствующий раздел cache.manifest:

CACHE MANIFEST
#V1.0
CACHE:
/
/Content/Site.css
/Content/themes/base/jquery-ui.css

NETWORK:
*
/

FALLBACK:

person GR7    schedule 28.04.2013    source источник
comment
Действительно хороший вопрос и ответ. Я собираюсь сделать POC всего этого завтра. Я надеюсь, что предпочтительный онлайн-режим отлично работает с архитектурой ASP.NET MVC.   -  person Leniel Maccaferri    schedule 12.05.2014


Ответы (1)


Как оказалось, html5 appcache или кэширование манифеста работает не так, как я ожидал.

Вот цитата с сайта whatwg.org, которая прекрасно это объясняет:

Автономные веб-приложения

Функция кеша приложения работает лучше всего, если логика приложения отделена от данных приложения и пользователя, а логика (разметка, сценарии, таблицы стилей, изображения и т. д.) указана в манифесте и хранится в кеше приложения с конечным числом статические HTML-страницы для приложения, а также данные приложения и пользователя, хранящиеся в веб-хранилище или индексированной базе данных на стороне клиента, динамически обновляемые с использованием веб-сокетов, XMLHttpRequest, событий, отправленных сервером, или какого-либо другого подобного механизма.

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

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

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

SETTINGS:
prefer-online
NETWORK:
*

так что, как оказалось, кеш приложения не подходит для страниц с динамической информацией, которые отображаются на сервере. whatwg.org называет такие приложения «устаревшими».

для естественного соответствия кешу приложения вам нужно иметь только отображение и общую логику на вашей html-странице и получать любую динамическую информацию с помощью запросов ajax.

надеюсь это поможет.

person GR7    schedule 09.05.2013