天天看点

html5应用缓存与Web Workers

离线浏览,用户可以在离线的时候浏览已经加载并且缓存好的数据

加快加载速度。

减少服务器负载。

如果启用应用程序缓存,需要在<code>&lt;html&gt;</code>标签当中包含manifest属性,manifest文件的建议扩展名是:”.appcache”

manifest文件为我们提供了三种缓存的方式: 

version n.n :version表示当前manifest的版本,当version发生变化的时候,此时当用户再次加载的时候,会将CACHE标签下列出的所有文件重新下载一次。 

- CACHE MANIFEST:在此标题下列出的文件,将在首次下载后进行缓存。 

- NETWORK: 在此标题下列出的文件需要与服务器的链接,且不会被缓存。 

- FALLBACK: 在此标题下列出的文件,规定访问缓存失败后,备用访问的资源,第一个是访问源,第二个是替换文件*.html /offline.html,例如404页面。

这里我创建一个web工程,并且新建一个html文件: 

index.html

style.css

可以看到这里,我的页面很简单,并且引用了一个style.css样式文件。并且在<code>&lt;html&gt;</code>标签当中,指定了缓存文件index.appcache. 

index.appcache 内容如下:

可以看到,这里我们使用CACHE类型的缓存,表示需要缓存index.html和css/style.css这两个文件。此时打开服务器,浏览该网页,在关闭服务器,会发现该网页同样可以访问,此时按下F12,打开开发者选项,会发现有如下缓存: 

同时也可以使用NETWORK类型的缓存,来表示那些文件是需要联网下载的,这里我将css/style.css文件写入到NETWORK类型的缓存当中。

html5应用缓存与Web Workers

可以看到此时只是缓存了html页面,并没有缓存css/style.css文件,此时关闭服务器,再次刷新该页面,效果如下: 

可以看到此时,就只是加载了html页面,并么有加载css文件,所以h1标签的字体是默认的。

这里,我将version更改了1.1,此时再次访问该页面的时候, 是会到服务其下载最新的页面,说到这里,缓存的缺点就出来了,就是哪怕我一个页面中只更新一行文字,但是当我更改了”index.appcache”文件中的version值之后,就会重新将CACHE中定义的所有内容,重新下载一次。

另外,我们还可以使用applicationcache对象来自动更新缓存。如下:

applicationcache是window对象的直接子对象,该对象的事件列表如下: 

status 返回缓存的状态

可选值

匹配常量

描述

appCache.UNCACHED

未缓存

1

appCache.IDLE

闲置

2

appCache.CHECKING

检查中

3

appCache.DOWNLOADING

下载中

4

appCache.UPDATEREADY

已更新

5

appCache.OBSOLETE

失效

方法

方法名

update()

发起应用程序缓存下载进程

abort()

取消正在进行的缓存下载

swapcache()

切换成本地最新的缓存环境

postMessage() :用于向html页面回传一段消息。

terminate() :终止web workers,并且释放计算机资源。

下面使用web workers简单实现一数字更新的demo: 

新建一个web工程,创建index.html

这里在index.html文件当中引入了index.js文件。 

index.js

可以看到,这里讲更新数据的具体操作,使用Worker来更新,在worker当中加载了count.js文件来做一些耗时,复杂的计算。然后使用worker的onmessage回调方法,将count.js返回的结果重新显示给numDiv。 

count.js

count.js文件比较简单,每隔一秒更新countNum的值,然后回传给调用者,也就是这里的index.js

此时运行效果如下: 

html5应用缓存与Web Workers

下面添加一个开始停止的控制按钮:

html5应用缓存与Web Workers

另外我们还可以通过navaigator对象的onLine属性来判断当前浏览器是否在线,该属性属于只读属性,会返回boolean类型的值。

转载至:http://blog.csdn.net/mockingbirds/article/details/48412967