好的,我正在为需要具有离线功能的移动应用程序构建PoC,我有几个关于我是否正确设计应用程序以及我将从缓存清单中获得什么行为的问题。
这个问题是关于在manifest的CACHE部分以及NETWORK部分中包含Controller动作的url。
我相信我在网上读到了一些相互矛盾的信息。在一些网站上,我读到,包括通配符在网络部分会使浏览器尝试从服务器检索一切,当它在线,只是使用任何缓存,如果没有互联网连接。
然而,今天早上我读了下面的文章潜入HTML5:让我们把这个离线:
标记为NETWORK:的行是"在线白名单"部分的开始。此部分中的资源永远不会被缓存,而是离线不可用。(尝试在离线状态下加载它们将会导致错误。)
那么,哪个信息是正确的?如果我在CACHE和NETWORK部分都添加了控制器动作的URL,应用程序将如何运行?
我有一个非常简单和小的PoC工作到目前为止,这是我所观察到的关于这个问题:
-
我有一个控制器动作,它只是生成4个随机数,并将它们设置在ViewBag上,视图将在UL上显示它们。
-
我没有使用输出缓存。唯一的缓存来自manifest文件
-
在添加manifest属性到我的布局之前。cshtml的html标签,每次我请求视图时,我每次都会得到不同的随机数,并且控制器动作上的断点设置将被击中。
-
我第一次在添加manifest属性后请求URL/View,控制器上的断点被击中3次(而不是之前的1次)。这已经很奇怪了,我将单独发布一个关于这个的问题,我只是把它写在这里供参考。
-
manifest和资源被缓存后(通过查看Chrome Dev Tools上的控制台窗口进行验证),每次我请求View/URL时,我得到缓存的版本,断点再也不会被命中。
这种行为让我相信,无论什么是在CACHE部分将覆盖或忽略任何是在网络部分,但就像我说的(和我在这里问的原因)是因为我是新的工作与此,我不确定这是如何工作,或者如果我错过了一些东西或没有正确使用它。
任何帮助都是非常感谢的
这里是cache.manifest的相关部分:
CACHE MANIFEST
#V1.0
CACHE:
/
/Content/Site.css
/Content/themes/base/jquery-ui.css
NETWORK:
*
/
FALLBACK:
事实证明,html5 appcache或manifest caching的工作方式与我预期的不同。
下面这段话来自whatwg.org,很好地解释了这一点:
离线Web应用程序
如果应用程序逻辑是与应用程序和用户数据分离,使用逻辑(标记、在清单中列出并存储的脚本、样式表、图像等在应用程序缓存中,使用有限数量的静态HTML页面用于应用程序,并与应用程序和用户数据存储在一起Web存储或客户端索引数据库,动态更新使用Web Sockets, XMLHttpRequest,服务器发送的事件,或其他一些类似的机制。
然而,遗留应用程序往往是这样设计的数据和逻辑在HTML中与每个操作混合在一起从服务器生成一个新的HTML页面。混合内容模型不能很好地与应用程序缓存一起工作特性:由于内容是缓存的,所以会导致用户总是看到以前缓存时的过时数据更新。
虽然没有办法使遗留模型工作得像分离的模型,它至少可以改装为离线使用使用优先在线应用缓存模式。要做到这一点,列出所有的您希望脱机工作的HTML页面所使用的静态资源在应用程序缓存清单中,使用manifest属性进行选择从HTML文件中显示,然后添加以下行舱单底部:
SETTINGS:
prefer-online
NETWORK:
*
因此,事实证明,应用程序缓存并不适合在服务器上呈现具有动态信息的页面。Whatwg.org称这种类型的应用程序为"遗留"。
为了与应用程序缓存自然匹配,您只需要在HTML页面上显示和通用逻辑,并通过ajax请求检索任何动态信息。