2

Хорошо, я создаю PoC для мобильного приложения, которое должно иметь автономные возможности, и у меня есть несколько вопросов о том, правильно ли я разрабатываю приложение, а также какое поведение я получу из манифеста кэша.Как работает автономный манифест/функциональность HTML5 с ASP.NET MVC 4?

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

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

Однако сегодня утром я прочитал следующее на Dive into HTML5 : Let's take this offline:

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

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

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

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

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

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

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

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

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

Любая помощь очень ценится

Вот соответствующий раздел кэша.манифест:

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

NETWORK: 
* 
/

FALLBACK: 
+0

Действительно хороший вопрос и ответ. Завтра я собираюсь сделать POC. Я надеюсь, что предпочтительный режим онлайн отлично работает с архитектурой ASP.NET MVC. –

ответ

3

Как выясняется, html5 AppCache или манифест кэширование работает иначе, чем я ожидал.

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

Offline Web Applications

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

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

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

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

SETTINGS: 
prefer-online 
NETWORK: 
* 

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

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

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