有趣的离线存储

有趣的离线存储

一.简单聊聊

        最近由于一直在准备实习,复习概念之余,我偶然发现了一个很有趣的技术点,特意跟大家来做个分享。随着Web App的发展,现在很多移动端App都使用HTML5的方式来开发,问题也就随之而来,除了一些HybridApp以外,其他的Web App都是通过浏览器来访问的,通过浏览器访问的话,就要通过互联网发送请求,这样就会导致用户无法在离线状态下使用APP,同时App中也不是所有的数据都要时时改变,也不需要每次都给服务器发送请求,所以这个名叫离线缓存的新属性就诞生了。我们通过离线存储,把需要离线存储在本地的文件,列在一个manifest配置文件中,就可以解决上述问题。这样即使在离线的情况下,用户也可以正常使用App。

二.离线存储的食用方法

        接下来我要将manifest(离线缓存)分为属性和离线缓存文件内容,这两个方面跟大家简要的来聊聊。

2.1  mainfest属性



...
html>

2.2  chache.manifest的文件内容

CACHE MANIFEST
#v0.11

CACHE://表示需要离线存储的资源列表,由于包含manifest文件的页面将被自动离线存储,所以不需要把页面自身也列出来。

js/app.js
css/style.css

NETWORK://表示在它下面列出来的资源只有在在线的情况下才能访问
resourse/logo.png

FALLBACK:
/ /offline.html//表示如果访问第一个资源失败,那么就使用第二个资源来替换他,比如上面这个文件表示的就是如果访问根目录下任何一个资源失败了,那么就去访问offline.html。

三.浏览器如何解析mainfest

        说到这你的心中可能会有着这样的一个疑问:“说了这么多,那浏览器是怎么对离线的资源进行管理和加载的呢?”别着急,这件事具体得分为两种情况进行讨论,我现在就来给你慢慢道来。

3.1在线情况下

        浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。
        如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。

3.2在离线情况下

        浏览器则会直接使用离线存储的资源。

注意事项:

        站点离线存储的容量限制是5M

        如果服务器对离线的资源进行了更新,那么必须更新manifest文件之后这些资源才能被浏览器重新下载,如果只是更新了资源而没有更新manifest文件的话,浏览器并不会重新下载资源,也就是说还是使用原来离线存储的资源。

        对于manifest文件进行缓存的时候需要十分小心,因为可能出现一种情况就是你对manifest文件进行了更新,但是http的缓存规则告诉浏览器本地缓存的manifest文件还没过期,这个情况下浏览器还是使用原来的manifest文件,所以对于manifest文件最好不要设置缓存。

        如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程将视为失败,浏览器继续全部使用老的缓存

你可能感兴趣的:(html)