HTML5新特性之离线缓存技术php中文网html教程

HTML5之前的网页,都是无连接,必须联网才能访问,这其实也是web的特色,这其实对于PC是时代问题并不大,但到了移动互联网时代,

设备终端位置不再固定,依赖无线信号,网络的可靠性变得降低,比如坐在火车上,过了一个隧道(15分钟),便无法访问网站,十分不便。

而离线web应用允许我们在脱机时与网站进行交互。

二、什么是离线Web应程序?为什么要开发离线的Web应用程序?

离线web应用程序是指:当客户端本地与web应用程序的服务器没有建立连接时,也能正常在客户端本地使用该web应用程序进行有关操作。

Web应用程序已经变的越来越复杂,很多领域都在利用Web应用程序。但是,它有一个致命的缺点:如果用户没有和Internet建立连接,他就

不能利用这个web应用程序了。因此H5新增了一个API,它使用一个本地缓存机制很好的解决了这个问题,使离线应用程序的开发成为了可能。

要想使web应用程序在离线状态的时候也能正常工作,就必须把所有构成web应用程序的资源文件,如HTML文件、CSS文件、JavaScript脚本

文件等放在本地缓存中,当服务器没有和Internet建立连接时,也可以利用本地缓存中的资源文件正常运行web应用程序。

三、什么是本地缓存,本地缓存与浏览器网页缓存的区别。

Web应用程序的本地缓存与浏览器的网页缓存有许多方面都存在着明显的区别。

1.本地缓存为整个web应用程序服务的,而浏览器的网页缓存只服务于单个网页。任何网页都具有网页缓存。而本地缓存至缓存那些指定的缓存

的页面。

2.网页缓存不安全不可靠,因为我们不知道在网站中到底缓存了哪些网页,以及缓存了网页上的哪些资源。而本地缓存可靠,我们可以控制对

哪些内容进行缓存,

不对哪些内容进行缓存,开发人员还可以利用编程的手段来控制缓存的更新,利用缓存对象的各种属性、状态和事件来开发出更加强大的离线

应用程序。

3.(有些)浏览器会主动保存自己的缓存文件以加快网站加载速度。但是要实现浏览器缓存必须要满足一个前提,那就是网络必须要保持连接

。如果网络没有连接,

即使浏览器启用了对一个站点的缓存,依然无法打开这个站点。只会收到一条错误信息。而使用离线web应用,我们可以主动告诉浏览器应该

从网站服务器中获取或缓存哪些文件,并且在网络离线状态下依然能够访问这个网站。

四、如何实现HTML5应用程序缓存?什么是manifest文件,在文件中制定什么内容需要进行本地缓存,哪些内容不需要?

实现HTML5应用程序缓存非常简单,只需三步,并且不需要任何API。只需要告诉浏览器需要离线缓存的文件,并对服务器和网页做一些

简单的设置即可实现。

4-1、创建一个cache.manifest文件,并确保文件具有正确的内容。

4-2、在服务器上设置内容类型。

4-3、所有的HTML文件都指向cache.manifest。

具体实现:

4-1:首先我们建立一个名为cache.manifest的文件,Windows平台下用记事本即可(也可用其他的IDE)。文件内容如下:

注意事项:

1、第一行必须是”CACHEDMANIFEST”文字,以把本文件的作用告知浏览器,即对本地缓存中的资源文件进行具体设置。

2、在manifest文件中,可以加上注释来进行一些必要说明或解释。注释行以”#”文字开头。

3、在CACHE之后的部分为列出我们需要缓存的文件。

4、在FALLBACK之后的部分每一行中指定两个资源文件,第一个资源文件为能够在线访问时使用的资源文件,第二个资源文件为

不能在线访问时使用的备用资源文件。

5、在NETWORK之后可以指定在线白名单,即列出我们不希望离线存储的文件,因为通常它们的内容需要互联网访问才有意义。

另外,在此部分我们可以使用快捷方式:通配符*。这将告诉浏览器,应用服务器中获取没有在显示部分中提到的任何文件或URL。

4-2:服务器上设置内容类型。

真正运行或测试离线web应用程序的时候,需要对服务器进行配置,让服务器支持text/cache-manifest这个MIME类型(在h5中规定

manifest文件的MIME类型是text/cache-manifest)。例如对Apache服务器进行配置的时候,需要找到

{apache_home}/conf/mime.type这个文件(.htaccess),并在文件最后添加如下所示代码:

text/cache-manifest.manifest。在微软的IIS服务器中的步骤如下所示:

(1).右键选择默认网站或需要添加类型的网站,弹出属性对话框

(3).在MIME映射下,单击文件类型按钮

(4).在打开的MIME类型对话框中单击新建按钮

(5).在关联扩展名文本中输入”manifest”,在内容类型文本框中输入”text/cache-manifest”,然后点击确定按钮。

4-3:设置HTML文件的指向。

(即使是在线状态也如此)。

1、网站的每一个html页面都必须设置html元素的manifest属性。Musttodo;

2、在你的整个网站应用中,只能有一个cache.manifest文件(建议放在网站根目录下);

3、部分浏览器(如IE8-)不支持HTML5离线缓存;

4、“#”开头的注释行可满足其他用途。应用的缓存会在其manifest文件更改时被更新。如果您编辑了一幅图片,或者修改了一个JavaScript函数,

这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。

五、掌握进行本地缓存的applicationCache对象及其属性和事件:

(1)缓存的更新:

如果有更新,新的清单文件以及清单中的列举的所有文件都会下载下来重新保存到程序缓存中。但要注意浏览器只是检查清单文件,而不会

检查缓存的文件是否有更新,如果修改一个缓存的js文件,并且要想让该文件生效,就必须去更新下清单文件。由于应用程序依赖的文件列

表其实并没有变化,因此最简单的方式就是更新版本。

代码如下:

注意:

①、浏览器检查清单文件以及更新缓存的操作是异步的,可能是在从缓存中载入应用之前,也有可能是同时进行。因此对于简单的web应用

而言,在更新清单文件之后,用户必须载入应用两次才能保证最新的版本生效:第一次是从缓存中载入老版本随后更新缓存;第二次才是从

缓存中载入最新的版本。

②、浏览器在更新缓存过程中会触发一系列事件,可以通过注册处理程序来跟踪这个过程同时提供反馈用户。

不同的情况触发不同的事件。

事件列表:

(1).没有可用更新

如果应用程序已经缓存并且清单文件没有动,则浏览器会触发noupdate事件

(2).有可用更新

如果应用程序已经缓存并且清单元件有改动,则浏览器会触发downloading事件并开始下载和缓存清单文件中列举的所有资源。

随着下载过程的进行浏览器还会触发”progress”事件,在下载完成后,会触发”updateready”事件。

(3).首次载入新的应用程序

如果还未缓存应用程序,如上所述downloading,progress事件都会触发。但是,当下载完成后,浏览器会触发”cached”事件

而不是updateready事件

(4).浏览器处于离线状态

如果浏览器处于离线状态,它无法检查清单文件,同时它会触发“error”事件。

如果一个未缓存的应用程序引用了不存的清单文件,浏览器也会触发该事件

(5).清单文件不存在

如果浏览器处理在线状态,应用程序也已经缓存起来,但是清单文件不存在,浏览器会触发obsolete事件,并将该应用程序

从缓存中移除。

缓存状态:

缓存的状态可以通过window.applicationCache.status获得,其状态主要包括如下6种:

(1).update

显式调用了更新缓存算法以检测是否有最新版本的的应用程序。这导致浏览器检测同一个清单文件(并触发相同的事件),

这和第一次载入应用程序时的效果是一样的。

(2).swapCache

它告诉浏览器可以弃用老缓存,所有的请求都从新缓存中获取。注意,这并不会重新载入应用程序:所有已经载入的html文件

、图片、脚本等资源都不会改变。但是,之后的请求将从最新的缓存中获取。这会导致“版本错乱”的问题,因此一般不推荐使用

,除非应用程序设计得很好,确保这样的方式没有问题。只有ApplicationCache.UPDATEREADY和

ApplicationCache.ABSOLETE时调用swapCache()才有意义(当状态OBSOLETE时,调用它可以立即弃用废弃的缓存,

让之后所有的请求都通过网络获取)。如果状态属性是其他数值的时候调用swapCache()方法,它就会抛出异常。

七、如何判断在线还是离线状态?

离线web应用指的是将自己“安装”在应用程序缓存中的程序,使得哪怕在浏览器处于离线状态时依然可访问它。为了在离线状态可用,

Web应用需要可以告知别人自己是离线还是在线,同时当网络连接的状态发生改变时候也能“感知”到。通过navigator.onLine属性,

navigator.onLine是HTML5定义用来检测设备是在线还是离线。对应的值为false或true。但是不同浏览器表现并不一致。

IE6+和Safari5+能够正确的检测到网络已断开,并将navigator.onLine设为flase。

Firefox3+和Opera10.6+也支持navigator.onLine。但需要手动讲浏览器设置为脱机模式才能让浏览器正常工作。

Chrome11及以上版本始终将navigator.onLine设为true。(不过作者的Chrome21已经能正常使用了)

HTML5定义了online&offline事件用于监听网络状态变化。

window.addEventListener('online',callback);//离线到上线

window.addEventListener('offline',callback);//上线到离线

目前除了IE(IE只支持navigator.onLine属性)外,其他最新浏览器都支持这个事件。

八、离线Web应用实战。

通过一个简单的记事本程序——PermaNote,来解释如何使用。程序将用户的文本保存到localStorage中,并且在网络连接可用的时候,

将其上传到服务器,PermaNote只允许用户编辑单个笔记。

PermaNote应用包含3个文件,一个应用清单文件、一个html页面文件,一个实现逻辑的js文件。

①.premanote.appcache部分:

③.permanote.js部分

status()函数用于显示状态栏消息,save()函数将笔记本保存到服务器,sync()用于确保本地与服务器文本的同步。

(1).onload

尝试和服务器同步,一旦有新版本的笔记并且完成同步后,就启用编辑器窗口。

下载完成的提醒。

(2).onbeforeunload

在未上传前,把当前版本的笔记数据保存到服务器上。

(3).oninput

每当textarea输入框内容发生变化时,都将其内容保存到localStorage中,并启动一个计时器。当用户停止编辑超过5秒

,将自动把数据保存到服务器。

(4).onoffline

当浏览器进入离线状态时,在状态栏显示离线消息。

(5).ononline当浏览器回到在线状态时,同步服务器,检查是否有新版本的数据,并且保存当前版本的数据。

(6).onupdateready

如果新版本的应用已缓存,则在状态栏展示消息告知用户。

(7).onnoupdate

如果应用程序缓存没有发生变化,则同时用户仍在运行当前版本。

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

THE END
1.机器学习:在线学习和离线学习区别机器学习中的在线学习(Online Learning)和离线学习(Offline Learning)是两种不同的学习方式,它们在数据处理和模型更新方面有着明显的区别。以下是它们的主要区别: 数据获取方式: 在线学习:在在线学习中,模型是不断地从数据流中接收新的样本并进行学习。这意味着模型会随着时间的推移不断更新,以适应新的数据。 https://blog.csdn.net/weixin_41194129/article/details/132998721
2.由于当前在线组态数据与离线组态数据不同,因此无诊断数据可用新建的程序文件,里面没程序的,正在组态,用的博图V15的,除了主CPU1511正常的,其他的所有模块包括PS模块都显示由于当前在线组态数据与离线组态数据不同,因此无诊断数据可用,请教一下什么原因 【方案】服务智能物流,华北工控RPC-610M整机支持自动分拣系统应用 只看该作者 | 赞[0] | 踩[1] | 引用 | 回复 | http://bbs.gkong.com/archive.aspx?id=477495
3.离线与在线LowE玻璃的区别?昨天,小鹰为大家介绍了什么是离线和在线Low-E玻璃,而这两个玻璃既有在线和离线之分,便一定是有区别的,那么他们区别又是什么呢? 根据两种Low-E玻璃膜层和工艺的不同,我们可以这样理解他们的区别: ①离线Low-E玻璃 离线Low-E是银膜,而我们日常常听说的单银、双银、三银Low-E玻璃,一般都是离线Low-E玻璃。 https://m.zhuxiaobang.com/weitoutiao/1749702716089347?channel_source=baidu_biji
4.案例9:使用计算—离线和在线使用的主要区别在离线仿真与在线仿真中递归计算(计算中某个输出位号作为自身的函数)的行为是不一样的。行为的不同是因为嵌入离线仿真和嵌入在线系统的设计差异导致的。本教程的目的是着重介绍这一差异。 ?在离线仿真器中,k时刻的值被用于初始化k+1时刻的仿真。如果你有计算[A] =[A]+1且[A]=0,那么开始时产生的顺序是1https://www.jianshu.com/p/28da66d9eafb
5.在对齐AI时,为什么在线方法总是优于离线方法?澎湃号·湃客该团队采用了与 Gao et al. (2023) 类似的设置,基于一组开源数据集进行了实验,结果表明:在同等的优化预算(相对于 SFT 策略的 KL 散度)下,在线算法的性能表现通常优于离线算法。 图1 给出了在线和离线算法在四个不同的开源数据集上表现出的 KL 散度与策略性能之间的权衡。图中的每个数据点代表了在训练过程https://www.thepaper.cn/newsDetail_forward_27434433
6.微信在线不在线的区别是什么?有什么方法知道好友是否在线?几年前,我们常用的聊天软件是qq,而现在,微信的风头几乎已经改过了qq。微信在很多功能方面和qq类似,不过,也有些不一样的功能。比如,微信在线与不在线,很多人都不知道这两者有什么区别,下面,我们来看看具体的情况。 其实微信是不能看好友在不在线的,这是微信的一个特点,就是没有在线与离线。也就是说,在线与不https://www.kaitao.cn/article/20180906115708.htm
7.在线设备与离线设备的区别在线设备与离线设备的区别 04月22日 一、设备状态 在线设备指的是能够在任何时刻通过网络进行连接的设备,它通常需要依赖网络进行设备的控制和管理。而离线设备则指那些不能随时进行网络连接的设备,通常是一些独立应用的设备,如手机、电脑等。 二、数据处理 在线设备具有实时性,能够实时处理和传输数https://b2b.baidu.com/q/aland?q=1D130616002178711A2209220616002178717C0D0E317839&id=qid50cf7396802e9c034832fe078d066429&answer=2521268275454283123&utype=2
8.《诛仙鬼王传》离线在线经验哪家强?诛仙鬼王传再来是在线和离线挂机经验的计算方式不一样。官方的解释是:在线是根据你实时的所得计算。而离线则是按照理论杀怪数值计算。 PK结果,在官方的一些数据帮助下,得出的结论是。 如果你杀怪的时间在5秒以下,那在线挂机所获得的经验会更多。反之如果高于5秒,那离线获得的经验会更多。但并不代表我离线时间越长,获得的经https://a.9game.cn/zxgwc/709605.html
9.生物发酵展资讯发酵工艺:毕赤酵母工程菌高密度发酵及其影响离线检测包括气象色谱法、高效液相色谱法等,由于其检测的滞后性无法准确的控制甲醇的流加速率,从而导致外源蛋白表达不完全或菌体中毒死亡。在线检测法通常是针对甲醇挥发性的检测,常用的检测方法是通过分析发酵过程中所排出的尾气,同时结合甲醇在气液两相中的平衡系数得出发酵液中甲醇的浓度,有学者发明了一种自动化连续https://www.biozl.cn/3226.html
10.在线互动式UPS在线式UPS离线式UPS三种UPS原理与对比在线交互式 UPS 与在线 UPS 与离线 UPS:应用 这三种不同运行原理的拓扑结构的应用从小型住宅到大型数据中心都有所不同。 离线式UPS因其较高的能源效率和经济性,最常用于家庭、小型办公室,电源设计预算较低,以及一些对供电质量要求相对较低的领域,个人电脑的最佳价值,也适用于打印机、扫描仪、应急电源和 EPABX。https://cloud.tencent.com/developer/article/2239093
11.双人成行离线和在线有什么区别双人成行二号玩家加入方法1、玩法不同。双人成行离线的玩法为线下玩法,需要玩家在线下相聚才可以一起游戏。双人成行在线可以通过网络直接游戏,不需要线下相聚。 2、网络要求不同。双人成行离线不需要网络连接,也就是说玩家在没有网络的情况下也可以正常游戏。而双人成行在线需要有比较好的网络环境才可以进行游戏。 https://gl.ali213.net/html/2022-6/860745.html
12.离线LowE玻璃与在线LowE玻璃的优缺点离线Low-E玻璃一般采用真空磁控溅射镀膜工艺,在玻璃表面镀制多层复合膜,实现Low-E功能。最主要的优点是颜色丰富多彩,纯度、热学性能均优于在线Low-E玻璃。离线Low—E玻璃品种多样,根据不同气候特点可以制作高、中、低多种透过率产品,并且颜色上有银灰、浅灰、浅蓝和无色透明等,用着色玻璃还可制作绿色等其他多种颜色https://www.yoojia.com/ask/3-9742006234974497042.html