HTML5的离线存储使用一个manifest文件来标明哪些文件是需要被存储的,使用如
对于manifest文件,要求:文件的mime-type必须是 text/cache-manifest类型。如果你是JAVA工程,在你的web.xml中配置请求后缀为manifest的格式:
manifest text/cache-manifest 这样可以控制请求到的manifest文件格式为text/cache-manifest的。
这样可以控制请求到的manifest文件格式为text/cache-manifest的。
manifest文件的格式:
CACHE MANIFEST # 这一句必须存在,而且必须放在头部 # 指明缓存入口 CACHE: index.html style.css images/logo.png scripts/main.js # 以下资源必须在线访问 NETWORK: login.php # 如果index.php无法访问则用404.html代替 FALLBACK: /index.php /404.html
所以控制离线存储的更新,需要2个步骤,一是更新资源文件,二是更新manifest文件,特别的,更新manifest文件是不需要修改什么特定内容的,只要是这个文件随意一处被修改,那么浏览器就会感知,对于我们的资源文件通常名称是固定的,比如xxx.css,更新内容不会带有文件名更新的情况下,需要更新manifest文件怎么操作呢?一个比较好的方式是更新任意一处# 开头的注释即可,其目的只是告诉浏览器这个manifest文件被更新过。
以上的这些内容,其更新操作都是浏览器自动完成的。同样的,W3C定义了离线存储的API规范:http://HdhCmsTestwhatwg.org/specs/web- ... k/#applicationcache
另外离线缓存需要注意以下几点:
// 更新,一般来说更新下载是通过用户**(如浏览器)自动完成的,但是这个方法适用于一些长期打开的页面, 比如邮件系统,可能这个页面是长期打开的,而不会有刷新动作,所以这个就比较适合做自动更新下载 void update(); // 取消 void abort(); // 替换缓存内容 ,对于manifest文件的改变,通常是下一次的刷新才会触发下载更新, 第三次刷新才会切换使用新的缓存文件,通过这个方法,可以强制将缓存替换 void swapCache();
Event handler Event handler event type onchecking checking onerror error onnoupdate noupdate ondownloading downloading onprogress progress onupdateready updateready oncached cached onobsolete obsolete
最后说一个对于manifest比较特别的地方:对于某个文件a.htm,其中有
比如:
1、如何计算PV UV,由于当前页面被强制加入manifest,那么PV 和UV的统计,成了一个难题,因为请求不再是发送到服务器;
2、对于某个使用manifest的文件,其带有的参数可能是随机性的统计参数,如sid=123sss, sid=234fff ,尤其是比如商品详情的id字段等,这样每个页面都自动加入到manifest中,将会带来很大的存储开销,而且是毫无意义的;
所以伴随而来的,是如何在现有的体系架构下进行数据统计的难题,一个常规的方案是进入离线存储页面后自动发出ajax请求,以告知服务器统计PV UV;
对于第二个问题,可能就比较棘手,但是将GET请求的方式改成POST的方式确实是个解决问题的方案。
以上就是html5的离线存储问题汇总的内容,更多相关内容请关注PHP中文网(HdhCmsTestgxlcms测试数据)!