html5离线储存不足,html5的离线存储问题

HTML5的一个重要特性就是离线存储,所谓的离线存储就是将一些资源文件保存在本地,这样后续的页面重新加载将使用本地资源文件,在离线情况下可以继续访问web应用,同时通过一定的手法(更新相关文件或者使用相关API),可以更新、删除离线存储等操作;

HTML5的离线存储使用一个manifest文件来标明哪些文件是需要被存储的,使用如 来引入一个manifest文件,这个文件的路径可以是相对的,也可以是绝对的,如果你的web应用很多,而且希望能集中管理manifest文件,那么静态文件服务器是个不错的选择。

对于manifest文件,要求:文件的mime-type必须是 text/cache-manifest类型。如果你是JAVA工程,在你的web.xml中配置请求后缀为manifest的格式:

manifest

text/cache-manifest

这样可以控制请求到的manifest文件格式为text/cache-manifest的。

manifest文件的格式:

CACHE MANIFEST# 这一句必须存在,而且必须放在头部# 指明缓存入口CACHE:index.htmlstyle.cssimages/logo.pngscripts/main.js# 以下资源必须在线访问NETWORK:login.php# 如果index.php无法访问则用404.html代替FALLBACK:/index.php /404.html

其中 CACHE 不是必须存在的,可以直接在 CACHE MANIFEST 行之下直接写需要缓存的文件,在这里指明的文件将被缓存到浏览器本地。在NETWORK之下指明的文件,是强制必须通过网络资源获取的,在FALLBACK下指明的是一种失败的回调方案,比如上述index.php无法访问,那么就发出404.htm请求

这样几步就可以完成对离线存储的支持。接下来要思考的,是如何更新离线存储?

当用户本地再次联网的时候,本地的离线存储资源需要检查是否需要更新,这个更新过程,也是通过manifest的更新来控制的,更新了manifest文件,浏览器会自动的重新下载新的manifest文件并在下一次刷新页面的时候进行资源文件的重新请求(第三次刷新替换本地缓存为最新缓存),而且这个请求是全局性的,也就是所有在manifest缓存列表中的文件都会被请求一次,而不是单独请求某个特定修改过的资源文件,因为manifest是不知道哪个文件被修改过了的。

对于全局更新的担心是不必要的,因为对于没有更新过的资源文件,请求依旧是304响应,只有真正更新过的资源文件才是200.

所以控制离线存储的更新,需要2个步骤,一是更新资源文件,二是更新manifest文件,特别的,更新manifest文件是不需要修改什么特定内容的,只要是这个文件随意一处被修改,那么浏览器就会感知,对于我们的资源文件通常名称是固定的,比如**.css,更新内容不会带有文件名更新的情况下,需要更新manifest文件怎么操作呢?一个比较好的方式是更新任意一处# 开头的注释即可,其目的只是告诉浏览器这个manifest文件被更新过。

以上的这些内容,其更新操作都是浏览器自动完成的。同样的,W3C定义了离线存储的API规范

API:

// 更新,一般来说更新下载是通过用户**(如浏览器)自动完成的,但是这个方法适用于一些长期打开的页面,比如邮件系统,可能这个页面是长期打开的,而不会有刷新动作,所以这个就比较适合做自动更新下

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,其中有 ,那么离线存储中,会自动将a.htm加入到列表中,这意味着a.htm的再次刷新将从本地缓存中获取,这样的机制从官方得到的答复是“特别的设计”,而对我们来说,这种强加的特性在后续的开发过程中会有不少问题。

比如:

1、如何计算PV UV,由于当前页面被强制加入manifest,那么PV 和UV的统计,成了一个难题,因为请求不再是发送到服务器;

2、对于某个使用manifest的文件,其带有的参数可能是随机性的统计参数,如sid=123sss, sid=234fff ,尤其是比如商品详情的id字段等,这样每个页面都自动加入到manifest中,将会带来很大的存储开销,而且是毫无意义的;

所以伴随而来的,是如何在现有的体系架构下进行数据统计的难题,一个常规的方案是进入离线存储页面后自动发出ajax请求,以告知服务器统计PV UV;

对于第二个问题,可能就比较棘手,但是将GET请求的方式改成POST的方式确实是个解决问题的方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 账号安全设置

1)配置文件 /etc/login.defs 设置密码有效期、长度和密码过期时间参数 PASS_MAX_DAYS 设置用户密码的有效期(以天数为单位) PASS_MIN_DAYS 是否可修改密码,0表示可修改,非0表示多少天可修改 PASS_MIN_LEN 设置用户密码…

重磅发布:2020全球前沿技术发展趋势报告

来源:科技日报作者:刘垠、操秀英大热的脑机接口、基因编辑等前沿技术发展如何?2020年科技界关注了哪些热点?22日在浦江创新论坛上发布的《全球前沿技术发展趋势报告》带来了答案。《全球前沿技术发展趋势报告》由中国科学技术信息…

400错误是什么原因_499错误是什么?499错误的原因及解决方法

​HTTP状态码出现499错误有多种情况,499错误是什么?下面我们来学习Nginx 499错误的原因及解决方法。日志记录中HTTP状态码出现499错误有多种情况,比如nginx反代到一个永远打不开的后端,日志状态记录就会是499、发送字节数是0。​经…

MapReduce过程详解及其性能优化

http://blog.csdn.net/aijiudu/article/details/72353510 废话不说直接来一张图如下: 从JVM的角度看Map和Reduce Map阶段包括: 第一读数据:从HDFS读取数据 1、问题:读取数据产生多少个Mapper?? Mapper数据过大的话&…

爱因斯坦梦断“大统一理论”

来源:数学职业家爱因斯坦发表了他最为得意之作:广义相对论之后,便开始了他的“统一之梦”。大有“躲进小楼成一统,管他冬夏与春秋”之势,这一“统”就是三十余年,到死方休。尽管统一场论一词始于爱因斯坦&a…

js数组截取前5个_想用好 Node.js?这 5 个经典国产项目值得细品

凭借着高并发性能优秀、异步事件驱动、入门简单等优势,Node.js 受到了不少开发者们的青睐。但不得不承认的是,如果用不好 Node.js,它的坑就会非常多,为了帮助各位 Node.js 的开发者们更灵活地使用它,Gitee 为大家推荐以…

微博html天涯吴奇隆刘诗诗,吴奇隆深夜微博晒爱心,为刘诗诗庆生,网友:撒了一大把狗粮...

导语:吴奇隆深夜微博晒爱心,为刘诗诗庆生,网友:撒了一大把狗粮明星夫妻的甜蜜生活,总会让大家感到幸福浪漫。看到自己的偶像能够过得这么好,作为粉丝心里也是很美的,为偶像的幸福感到高兴。娱乐…

模拟器登陆

Python模拟登录的几种方法 https://www.cnblogs.com/chenxiaohan/p/7654667.html 图文详解Python模拟登录新浪微博流程 http://python.jobbole.com/86638/转载于:https://www.cnblogs.com/zhangbojiangfeng/p/8605114.html

设计模式:单例模式(使用c++分别实现饿汉式单例、带双重检查锁定机制的懒汉式单例以及IoDH技术的单例)

单例模式 引言正文1. 饿汉式单例2. 带双重检查锁定机制的懒汉式单例3. IoDH技术的单例 结论优点饿汉式单例带双重检查锁定机制的懒汉式单例IoDH技术的单例 缺点饿汉式单例带双重检查锁定机制的懒汉式单例IoDH技术的单例 引言 在软件开发中,单例模式是一种很常用的设…

划重点!2020年,这些前沿技术最受关注

来源:科技日报大热的脑机接口、基因编辑等前沿技术发展如何?2020年科技界关注了哪些热点?22日在浦江创新论坛上发布的《全球前沿技术发展趋势报告》带来了答案。《全球前沿技术发展趋势报告》由中国科学技术信息研究所和上海市科学学研究所联…

MVC里面写html获取不到input,asp.net-mvc – ASP.Net [HiddenInput]数据属性在Razor中用Html.EditorForModel渲染时不起作用?...

我有以下型号:public class Product{[HiddenInput(DisplayValue false)]public int ProductID { get; set; }[required(ErrorMessage"Please enter a product name")]public string Name { get; set; }[required(ErrorMessage"Please enter a descr…

select默认选中的option_macOS下妙用option按键

macOS下option键是非常重要的按键,它的特性是激活一些隐藏功能,所以经常被多数人忽视。现在总结一下option键让你意想不到的功能吧。最大化窗口mac左上角三个按钮默认为关闭 最小化和全屏,但大多数时候,我们最要的是最大化窗口&am…

化身“监工”的AI,我们该如何相处?

来源: 脑极体AI技术带来整体社会福利增加的同时,也正在带来一系列新的问题。目前来说,与人工智能是否会取代人类这类“玄学”问题而言,当下最现实的一个问题就是人和AI的协作问题了。不久前,人物杂志的一篇《外卖骑手&…

怎么判断一个字符串的最长回文子串是否在头尾_最长回文字串/子序列问题(leetcode5,9,519)

leetcode 5 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd" 输出…

html 点击div 改变高度,HTML / CSS将div设置为同级的高度

我有三分之二的div。所包含的div之一向左浮动,另一个向右浮动。我希望2个同级div始终处于相同的高度,但是对此存在问题。到目前为止,我只在Firefox中查看该页面,并认为在至少一个浏览器中运行它后,我会担心任何跨浏览器…

张亚勤:对于产业来讲,深度学习的黄金时代刚刚开始

大数据文摘出品由中国计算机学会(CCF)举办的计算领域年度盛会CNCC 2020今天在北京隆重开幕,大会主题是“信息技术助力社会治理”。大会设有14个特邀报告、3场大会论坛、百余场技术论坛以及CCF CTO峰会等多场活动,邀请到超过400位国内外计算机领域知名专家…

去月球“你知道戴维会变身成哪种动物吗?”

在《去月球》游戏中,有一节会遇到一个问题: “你知道戴维会变身成哪种动物吗?” (请用英语大写字母回答) 其实这个答案,和上面的回忆对话,就能知道了,看下图 答案就是:CO…

计算机组装与维修案例分析,设备故障维修案例分析三则

设备故障维修案例分析三则本文列举较具有代表性的故障维修的三个案例,以此阐述在医疗设备维修中对各方面知识综合运用的能力以及对设备故障诊断分析过(本文共2页)阅读全文>>针对通信设备故障维修领域知识表示规范性差、结构性不强、案例利用率低等问题,结合设备维修案例知…

erp实施 数据库面试题_ERP管理系统多少钱

ERP系统本质上是一套软件包,可以执行会计,产品计划和开发,制造,库存管理,销售管理,人力资源和其他业务任务。很多企业在选择ERP系统的时候都会比较关心费用的问题,其实ERP系统价格受很多方面因素…

web.xml配置解释

<?xml version"1.0" encoding"UTF-8"?><web-app version"3.1" xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org…