基于Appcache的文件缓存方法与流程

文档序号:13136905阅读:1216来源:国知局

本发明涉及一种缓存技术,具体地说是一种基于appcache的文件缓存方法。



背景技术:

在计算机和网络迅速发展的现代社会,每个人生活、学习和工作都离不开web应用和数据存储,大量文档和资料数据的缓存是需要重点解决的问题。起初,html页面只能通过向服务器访问从而获得页面并展示出来。在w3c的html5标准中(https://www.w3.org/tr/html5/),提出了一个新的叫appcache的机制(又叫offlinewebapplications:https://www.w3.org/tr/html5/browsers.html#offline),具体的原理就是通过一个manifest文件声明页面有哪些内容需要缓存到浏览器本地,从而当下次浏览器访问到此页面网址的时候,就可以直接使用缓存到浏览器本地的文件,而不用再次请求服务器。并且在浏览器所在的电脑未联网的时候,也可以保证访问声明了manifest文件的网址。

manifest文件的内容分为如下几个区域:

cache(缓存),此区域中列出所有需要缓存到本地的文件;

fallback(回调区域),当浏览器处于离线状态的时候,调用某些文件(网址)时应转而调用其他网址;

network(不缓存区域),列出不应缓存到本地的文件;

settings(设置),列出一些影响appcache工作的配置项,一般不设置。

除此之外,html5标准中还引入appcache对象,用于暴露一些事件和方法,用于通知用户在缓存过程中发生的一系列的动作。

从appcache的引入的机制来看,appcache主要通过在manifest文件中声明的方式,将服务器端的资源(如网页,cascadingstylesheets,javascript等)缓存到浏览器中,从而达到离线访问或加速访问速度的目的。一般来说,manifest文件都是一个内容固定的文本文件,只有当网站版本更新的时候才会更新manifest文件,如此就存在一些使用场景的问题:1、当访问数据资源量比较大的功能性网站时,比如很多图片的相册网站(一个网站有很多个相册,每个相册有很多的图片)或医学影像调阅网站(一个检查有很多的图片),无法实现只缓存网站当前的相册或图片来加快响应速度,若缓存全部的相册或图片资源到浏览器亦不可行,因为总的图片量太大;2、一个网站缓存的磁盘空间是有限的,若每个相册或者每个检查都生成一个特定的manifest文件,则当用户访问了多个相册或者多个检查时,浏览器会自动的清除一部分已经缓存的资源以控制缓存空间,而用户不知道当前在磁盘缓存的是哪个相册或者检查的图像,也无法用于那种通过参数来指定需要缓存的资源,实用性有限,由于系统中生成了很多的manifest文件,实现起来也较复杂。



技术实现要素:

本发明的目的在于提供一种基于appcache的文件缓存方法,该文件缓存方法可以只缓存某一个资源的指定文件,且明确知道在浏览器中缓存了这些资源,加快了资源缓存下载的速度,可以显示具体资源的缓存进度指示,提高了用户的体验,并减轻了浏览器管理manifest文件的负担。

本发明为解决上述技术问题,所采用的技术方案如下:

基于appcache的文件缓存方法,其特征在于,包括:

浏览器访问系统的一个网址,预先指定该网页使用某一个manifest文件;

服务器端使用动态网页技术响应所述manifest文件请求时,先通过cookie判断浏览器是否缓存了所述manifest文件的指定资源,然后根据判断结果对所述manifest文件进行相应操作后发送至浏览器端,浏览器端接收所述manifest文件并进行文件缓存。

优选的是,所述相应操作包括:当所述浏览器未缓存过本网站的任何资源时,所述manifest文件直接在cache缓存区列出需要缓存的指定资源的全部文件的url,浏览器端收到所述manifest文件后,自动开始下载并缓存指定资源,并在cookie中写入缓存资源的id。

优选的是,所述相应操作还包括:当所述浏览器缓存过本网站的其他资源时,所述manifest文件先是直接返回httpcode404的响应,并清空cookie中写入资源的id,浏览器端触发一个error事件并删除原来通过所述manifest文件缓存到本地的资源,程序通过javascript部署appcache的error事件后,通过javascript使用iframe再次请求一个引用了所述manifest文件的网页,之后,所述manifest文件直接在cache缓存区列出需要缓存的指定资源的全部文件的url,浏览器端收到所述manifest文件后,自动开始下载并缓存指定资源,并在cookie中写入缓存资源的id。

优选的是,所述相应操作还包括:当所述浏览器缓存过当前访问的资源时,manifest文件返回第一次访问特定manifest文件的相同内容,浏览器收到所述manifest文件后,认为已经缓存过,不再下载缓存所述资源。

优选的是,浏览器访问系统的一个网址时,可以通过使用iframe加载多个指定的相应网页,多个所述相应网页分别缓存指定资源,从而加快缓存文件下载的速度。

优选的是,在文件缓存过程中,利用javascript程序通过捕捉downloading和progress事件,得出当前所述浏览器下载的文件个数,所述javascript程序结合已下载文件个数和文件总数计算并显示缓存进度百分比。

优选的是,当程序进行多网页缓存时,所述javascript程序结合所有已缓存的文件数和文件总数计算并显示缓存进度百分比。

优选的是,所述资源为一个文件包中的全部文件。

本发明具有以下技术效益:本发明可以实现浏览器只缓存某一个资源的指定文件,更灵活,兼容性更广;配合cookie中的值,程序可明确知道在浏览器中缓存了哪些资源;多网页同时下载缓存同一资源,加快了资源缓存下载的速度;网页界面为用户提供具体资源的缓存进度百分比,提高了用户的体验;网站针对一类资源时,只需要提供固定的几个manifest文件网址,简化了网站的管理,并减轻了浏览器管理manifest文件的负担。

本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。

附图说明

图1为本发明文件缓存方法流程图。

具体实施方式

下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。

如图1所示,本发明提供一种基于appcache的文件缓存方法,包括:浏览器访问系统的一个网址,预先指定该网页使用某一个manifest文件s1;服务器端使用动态网页技术响应所述manifest文件请求s2时,先通过cookie判断浏览器是否缓存了该manifest文件的指定资源s201;然后根据判断结果对所述manifest文件进行相应操作后发送至浏览器端s202,浏览器端接收该manifest文件并进行文件缓存s203。

所述相应操作包括:当所述浏览器未缓存过本网站的任何资源时,所述manifest文件直接在cache缓存区列出需要缓存的指定资源的全部文件的url,浏览器端收到所述manifest文件后,自动开始下载并缓存指定资源,并在cookie中写入缓存资源的id。

所述相应操作还包括:当所述浏览器缓存过本网站的其他资源时,所述manifest文件先是直接返回httpcode404的响应,并清空cookie中写入资源的id,浏览器端触发一个error事件并删除原来通过所述manifest文件缓存到本地的资源,程序通过javascript部署appcache的error事件后,通过javascript使用iframe再次请求一个引用了所述manifest文件的网页,之后,所述manifest文件直接在cache缓存区列出需要缓存的指定资源的全部文件的url,浏览器端收到所述manifest文件后,自动开始下载并缓存指定资源,并在cookie中写入缓存资源的id。

所述相应操作还包括:当所述浏览器缓存过当前访问的资源时,manifest文件返回第一次访问特定manifest文件的相同内容,浏览器收到所述manifest文件后,认为已经缓存过,不再下载缓存所述资源。

浏览器访问系统的一个网址时,可以通过使用iframe加载多个指定的相应网页,多个所述相应网页分别缓存指定资源,从而加快缓存文件下载的速度。

在文件缓存过程中,利用javascript程序通过捕捉downloading和progress事件,得出当前所述浏览器下载的文件个数,所述javascript程序结合已下载文件个数和文件总数计算并显示缓存进度百分比。

当程序进行多网页缓存时,所述javascript程序结合所有已缓存的文件数和文件总数计算并显示缓存进度百分比。

所述资源为一个文件包中的全部文件。

尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1