离线web存储

本地缓存与浏览器网页的缓存

本地缓存与浏览器网页缓存的区别

离线缓存需要 本地缓存web应用程序的所有html css、 js 文件本地缓存服务于整个web应用

浏览器网页缓存只服务于单个网页,

任何网页都具有缓存,而本地缓存只缓存你指定缓存的网页。网页缓存不安全、不可靠,我们不知道网站中缓存了哪些网页,缓存了哪些网页上的资源。本地缓存是可靠,我们可以控制对那些没内容进行缓存,开发人员还可用编程的手段来控制缓存的更新,利用缓存对象的属性、状态事件开发更强大的离线web应用。

manifest文件

web应用的本地缓存是通过每个页面的manifest文件进行管理的

CACHE MANIFEST   //必须的

#This is a comment

CACHE         //要缓存文件用于离线使用

index.html

style.css

NETWORK:   //  不进行本地缓存存储的文件

search.php

login.php

FALLBACK:   //两个文件分别为能够在线时访问使用的资源,不能在线访问时用的资源

/api offline.html

applicationCache对象:代表本地缓存,用它来通知本地缓存已被更新,也允许用户手动更新

当浏览器对本地缓存更新,装入新文件的时会触发applicationCatche对象的updateready事件 来通知本地缓存已被更新(可以用它来告诉用户,用户需要手工刷新来获取页面的最新版本)

applicationCatche.onUpdateReady = function(){}

swapCatch方法用于手工执行本地缓存的更新只能在applicationCatche的updateready事件被触发时调用,updateReady事件只有在服务器上的manifest文件被修更新,且把manifest文件中所要求的资源下载到本地时出发

setInterval(function() {

// 手工检查是否有更新

applicationCache.update();

}, 5000);

applicationCache.addEventListener("updateready", function() {

if (confirm("本地缓存已被更新,需要刷新画面来获取应用程序最新版

本,是否刷新?")) {

// (3) 手工更新本地缓存

applicationCache.swapCache();

// 重载画面

location.reload();

}

}, true);

applicationCatche的其他事件

function init()

{

var msg=document.getElementById("msg");

applicationCache.addEventListener("checking", function() {

msg.innerHTML+="checking<br/>";

}, true);

applicationCache.addEventListener("noupdate", function() {

msg.innerHTML+="noupdate<br/>";

}, true);

applicationCache.addEventListener("downloading", function() {

msg.innerHTML+="downloading<br/>";

}, true);

applicationCache.addEventListener("progress", function() {

msg.innerHTML+="progress<br/>";

}, true);

applicationCache.addEventListener("updateready", function() {

msg.innerHTML+="updateready<br/>";

}, true);

applicationCache.addEventListener("cached", function() {

msg.innerHTML+="cached<br/>";

}, true);

applicationCache.addEventListener("error", function() {

msg.innerHTML+="error<br/>";

}, true);

}

HTML5近十年来发展得如火如荼,在HTML5平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化。HTML功能越来越丰富,支持图片上传拖拽、支持localstorage、支持web sql database、支持文件存储api等等。它任重而道远,致力于将Web带入一个更为成熟的应用平台。在所有炫酷特性中,最让我喜欢的是它具有离线缓存Web应用的功能。

开发离线Web 应用程序:三大核心功能

在开发支持离线的 Web 应用程序时,开发者通常需要使用以下三个方面的功能:

1. 离线资源缓存:需要一种方式来指明应用程序离线工作时所需的资源文件。这样,浏览器才能在在线状态时,把这些文件缓存到本地。此后,当用户离线访问应用程序时,这些资源文件会自动加载,从而让用户正常使用。HTML5 中,通过 cache manifest 文件指明需要缓存的资源,并支持自动和手动两种缓存更新方式。

2. 在线状态检测:开发者需要知道浏览器是否在线,这样才能够针对在线或离线的状态,做出对应的处理。在 HTML5 中,提供了两种检测当前网络是否在线的方式。

3. 本地数据存储:离线时,需要能够把数据存储到本地,以便在线时同步到服务器上。为了满足不同的存储需求,HTML5 提供了 DOM Storage 和 Web SQL Database 两种存储机制。前者提供了易用的 key/value 对存储方式,而后者提供了基本的关系数据库存储功能。

离线存储HTML5 Web SQL Database

Web SQL Database 提供了基本的关系数据库功能,支持页面上的复杂的、交互式的数据存储。它既可以用来存储用户产生的数据,也可以作为从服务器获取数据的本地高速缓存。例如可以把电子邮件、日程等数据存储到数据库中。Web SQL Database 支持数据库事务的概念,从而保证了即使多个浏览器窗口操作同一数据,也不会产生冲突。

它还引入了一套使用 SQL 来操纵客户端数据库(client-side database)的 API,这些 API 是异步的(asynchronous)。所使用的 SQL 语言为 SQLite 3.6.19。其中 SQLite 是一款轻型的数据库,占用资源非常低,支持 Windows/Linux/Unix 等主流操作系统,同时能够跟很多程序语言相结合,如 C#,PHP,Java,JavaScript 等,比起 Mysql,PostgreSQL 这两款开源的数据库管理系统来说,它的处理速度更快。目前iOS和Android平台支持运行Web SQL Database。

var db = window.openDatabase("DBName", "1.0", "description", 5*1024*1024); //5MB

db.transaction(function(tx) {

tx.executeSql("SELECT * FROM test", [], successCallback, errorCallback);

});

Web Workers

main.js:

var worker = new Worker(‘task.js‘);

worker.onmessage = function(event) { alert(event.data); };

worker.postMessage(‘data‘);

task.js:

self.onmessage = function(event) {

// Do some work.

self.postMessage("recv‘d: " + event.data);

};

HTML5 IndexedDB:轻量级NoSQL数据库

IndexedDB是HTML5-WebStorage的重要一环,是一种轻量级NoSQL数据库。

w3c为IndexedDB定义了很多接口,其中Database对象被定义为IDBDataBase。

浏览器对象中,实现了IDBFactory的只有indexedDB这个实例。

五步创建HTML5离线Web应用

在HTML5提供的所有炫酷功能里,创建离线缓存网页是我最喜欢的一个特性,以下是五步快速创建HTML5离线Web应用的步骤

1. 第一步:创建一个有效的HTML5文档,HTML5 doctype比xhtml更易于识记。

创建一个名为index.html的文件,这里学习如何使用CSS3来策划网站布局。

http://www.catswhocode.com/blog/create-an-adaptable-website-layout-with-css3-media-queries

2. 新增.htaccess支持

我们要创建的缓存页面称为manifest文件,假设你所使用的服务器是Apache,我们在创建文件之前,需要往.htaccess文件新增一个指令。

打开.htaccess文件,该文件部署在网站的根目录下,新增以下代码:

AddType text/cache-manifest .manifest

该指令可以确保每一个.manifest文件文本高速缓存。如果该文件不存在,整个缓存效果就无法实现,页面也不能实现离线缓存。

3. 创建.manifest文件

在我们创建好了.manifest文件后,事情就变得有趣多了。创建好新文件,命名为offline.manifest,嵌入以下代码。

CACHE MANIFEST

#This is a comment

CACHE

index.html

style.css

image.jpg

image-med.jpg

image-small.jpg

notre-dame.jpg

现在你拥有了一个完美的manifest列表。其实原理很简单,在声明CACHE后,你可以列出自己想要离线缓存的文件。这个对于缓存一个简单的网页,已经是绰绰有余了,而HTML5的缓存有其它一些有趣的功能。

CACHE MANIFEST   //必须的

#This is a comment

CACHE         //要缓存文件用于离线使用

index.html

style.css

NETWORK:   //  不进行本地缓存存储的文件

search.php

login.php

FALLBACK:   //两个文件分别为能够在线时访问使用的资源,不能在线访问时用的资源

/api offline.html

在这个示例中,manifest文件声明了CACHE,用于缓存index.html和style.css。同时,我们声明了NETWORK,用于指定不被缓存的文件,比如登录页面。

最后声明的是FALLBACK,这个声明允许将用户转入一个指定的页面,比如本例中如果不打算离线查看API资源的话,可以转向Off.html页面。

4. 将manifest 文件链接到HTML文档中。

在manifest文件和主要的html文档准备好了以后,你唯一还需要做的事情是将manifest文件链接到html文档中。

操作方法很简单,只需在html元算中添加manifest 属性,代码如下:

本地数据库

1.创建访问数据库的对象                  //var db = openDatabase(‘mysql‘,‘1.0‘,‘Test DB‘,2*1024*1024) 当数据库不存在时会创建数据库

2.使用事务处理                                   //访问数据库调用transaction方法执行事务处理  参数为一个回调函数

Eg bd.transaction(function(tx){

tx.executeSql(‘CREATE TABLE IF NOT EXISTS MsgData(name TEXT, message TEXT, time INTEGER)‘,[]);

tx.executeSql(‘SELECT * FROM MsgData‘, [], function(tx, rs)

{ //removeAllData();

for(var i = 0; i < rs.rows.length; i++)

{

showData(rs.rows.item(i));

}

});  });  });

Tx.executeSql(‘sql参数用?‘,[为?赋值],funsuccess,funerror)

本地缓存通过每个页面的mainfest文件来管理。

浏览器和服务器的交互过程:

浏览器请求URL->服务器返回页面->浏览器解析页面->服务器返回所有资源->浏览器处理mainfest文件->服务器返回所有要求本地缓存的文件->浏览器对本地缓存进行更新

浏览器再次请求URL->浏览器发现缓存->浏览器解析缓存页面->浏览器请求mainfest->(无更新)服务器返回304(【如果已更新】->浏览器再次请求URL->浏览器发现缓存页面->浏览器解析缓存页面->浏览器请求mainfest文件->服务器返回更新过的mainfest->浏览器处理mainfest->浏览器返回本地缓存->浏览器对本地缓存进行更新)

【缓存更新在本地缓存更新完还是不能用,只有重新打开这个页面的时候才能使用更新过的资源文件】

通过触发applicationCache对象的onUpdateReady事件,告诉用户本地缓存已经被更新,需手工刷新页面来得到最新版本的应用程序。

通过触发applicationCache对象的swapcache方法手工执行本地缓存更新操作,他只能在applicationCache对象的updataReady事件里被触发调用。

时间: 2025-01-15 08:22:18

离线web存储的相关文章

HTML5应用程序缓存实现离线Web网页或应用

HTML5应用程序缓存和浏览器缓存的区别.(有些)浏览器会主动保存自己的缓存文件以加快网站加载速度.但是要实现浏览器缓存必须要满足一个前提,那就是网络必须要保持连接.如果网络没有连接,即使浏览器启用了对一个站点的缓存,依然无法打开这个站点.只会收到一条错误信息.而使用离线web应用,我们可以主动告诉浏览器应该从网站服务器中获取或缓存哪些文件,并且在网络离线状态下依然能够访问这个网站. 如何实现HTML5应用程序缓存.实现HTML5应用程序缓存非常简单,只需三步,并且不需要任何API.只需要告诉浏

HTML5 02. 多媒体控件、拖拽事件、历史记录、web存储、应用程序缓存、地理定位、网络状态

多媒体 video:是行内块(text-align: center; 对行内块适用) <figure></figure>: 多媒体标签 : <figcaption></figcaption>: 多媒体标题 方法: load() 加载.play()播放.pause()暂停 属性: currentTime 视频播放的当前进度. duration:视频的总时间. paused:视频播放的状态 事件:   oncanplay:事件在用户可以开始播放视频/音频(aud

HTML5离线Web应用实战:五步创建成功

[IT168 技术]HTML5近十年来发展得如火如荼,在HTML 5平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化.HTML功能越来越丰富,支持图片上传拖拽.支持localstorage.支持web sql database.支持文件存储api等等.它任重而道远,致力于将Web带入一个更为成熟的应用平台.在所有炫酷特性中,最让我喜欢的是它具有离线缓存Web应用的功能. 开发离线Web 应用程序:三大核心功能 在开发支持离线的 Web 应用程序时,开发者通常需要使用以下三个方面的功能:

四种有能力取代Cookies的客户端Web存储方案

目前在用户的网络浏览器中保存大量数据需要遵循几大现有标准,每一种标准都拥有自己的优势.短板.独特的W3C标准化状态以及浏览器支持级别.但无论如何,这些标准的实际表现都优于广泛存在的cookies机制. 今天的Web应用程序开始在客户端中执行大量数据处理工作,甚至可能需要以脱机方式完成任务.可以说,客户端数据存储对于下一代Web应用程序的发展起到了至关重要的作用. 然而直到现在,cookies仍然是用户浏览器中最常见的数据存储机制.如果一款Web应用需要重复访问某些数据,则只有两种方式可供选择:要

HTML5中的本地、WebSql、离线应用存储

1.   HTML5存储相关API a)   Localstorage 本地存储 b)   Web Sql DataBase 本地数据库存储 c)   .manifest 离线应用存储 2.   HTML5 localStorage 本地存储: a)   本地存储是一个window的属性:, 相当于一个大型的Cookie; b)   window.localStorage : c)   set方法: i.      localStorage.t1 = “aaa”; ii.      localS

离线Web应用Manifest

HTML5新增离线功能. 假设有一个在线笔记应用,当用户的手机网络断开时,他可能正在编辑一则笔记. 使用HTML5的离线Web应用,他就可以继续离线编辑笔记,然后等到网络再次连接时将本地数据发送到服务器. 离线Web应用的运行机制是每个需要离线使用的网页都指定一个后缀名为.manifest的文本文件. 这个文本文件罗列了该网页离线使用时所需的所有的资源文件(HTML.图片.Javascript等).支持离线Web应用的浏览器 会自动读取.manifest文件. 1.使用方法. 在HTML的开始标

【温故而知新-Javascript】使用Web存储

Web存储允许我们在浏览器里保存简单的键/值数据.Web存储和cookie很相似,但它有着更好的实现方式,能保存的数据量也很大.这两种类型共享相同的机制,但是被保存数据的可见性和寿命存在区别. PS:还有一种存储规范名为“索引数据库API”(Indexed Database API),它允许保存富格式数据和进行SQL风格的查询. 1.使用本地存储 我们可以通过全局属性 localStorage访问本地存储功能.这个属性会返回一个Storage 对象,下表对其进行了介绍.Storage 对象被用来

Web 存储简介

什么是 Web 存储? Web 存储通常与 HTTP Cookie 相仿.与 Cookie 类似,Web开发人员可以将每次会话或域特定的数据作为名称/值对存储在使用 Web 存储的客户端上.但是,与 Cookie不同的是,在控制某个窗口存储的信息如何向其他窗口显示时,Web 存储要更为简单. 例如,用户可能会打开两个浏览器窗口,购买两个不同航班的机票.然而,如果航空公司的 Web 应用程序使用 Cookie存储其会话状态,那么相关信息可能会从一笔交易“泄露”至另一笔交易,进而导致用户可能在未得到

浅谈web存储

1.先来说说之前的客户端存储吧~在html5出来之前~客户端存储主要是使用cookie~不过这种古老的方式存在着好一些弊端~举例如下: 可以存储的数据的大小受到限制~官方指出一个域名下最多可以存储4k的数据(有点少吧~~) cookie的数据放到了http请求头上~这样不仅使得http请求头变得臃肿~过多的cookie会使请求越来越慢~同时还带来了安全的问题~这玩意默认是明文的 同时注意cookie是会过期的~ 2.还有一种存储方式是userData~但是这个只有ie支持~考虑到平台的限制~此处