整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML5 Web存储:在浏览器中持久保存数据的新方

HTML5 Web存储:在浏览器中持久保存数据的新方法(十五)

TML5引入了一种新的Web存储机制,它允许我们在浏览器中持久保存数据,而无需依赖于传统的Cookie或服务器端存储。这种新方法提供了更简单、更高效的方式来处理客户端数据,并且在离线状态下也能正常工作。以下是一些常用的HTML5 Web存储技术及其代码示例:

1. 本地存储(LocalStorage)

本地存储允许我们在浏览器中存储键值对数据,并且这些数据会一直保留,直到我们显式地删除它们。以下是一个使用本地存储保存用户偏好设置的示例代码:

```html

<script>
// 存储用户偏好设置
localStorage.setItem('theme', 'dark');

// 获取用户偏好设置
var theme=localStorage.getItem('theme');
</script>

```

2. 会话存储(SessionStorage)

会话存储与本地存储类似,但是存储的数据只在会话期间有效,一旦会话结束或浏览器关闭,存储的数据就会被清除。以下是一个使用会话存储保存用户登录状态的示例代码:

```html

<script>
// 存储用户登录状态
sessionStorage.setItem('loggedIn', 'true');

// 检查用户登录状态
var loggedIn=sessionStorage.getItem('loggedIn');
</script>

```

3. 离线存储(Offline Storage)

离线存储允许我们在浏览器中缓存网页的资源,使得用户在离线状态下仍然可以访问和浏览已缓存的页面。以下是一个使用离线存储缓存网页资源的示例代码:

```html

<!DOCTYPE html>
<html manifest="offline.appcache">
<body>
<!-- 网页内容 -->
</body>
</html>

```

4. IndexedDB

IndexedDB是一个基于键值对的数据库系统,它允许我们在浏览器中存储和检索结构化数据。以下是一个使用IndexedDB存储用户数据的示例代码:

```html

<script>
// 打开数据库
var request=window.indexedDB.open('myDatabase', 1);

// 创建对象存储空间
request.onupgradeneeded=function(event) {
var db=event.target.result;
var objectStore=db.createObjectStore('users', { keyPath: 'id' });
};


// 存储用户数据

request.onsuccess=function(event) {
var db=event.target.result;
var transaction=db.transaction('users', 'readwrite');
var objectStore=transaction.objectStore('users');

var user={ id: 1, name: 'John Doe', email: 'john@example.com' };
var request=objectStore.add(user);
};
</script>

```

通过使用这些HTML5 Web存储技术,我们可以更灵活地处理客户端数据,并且提供更好的用户体验。无论是存储用户偏好设置、管理用户登录状态,还是实现离线访问,这些新方法都为我们提供了更多的选择和便利。记住,在使用HTML5 Web存储时,要根据需求选择适当的技术,并合理管理存储的数据。

我是永不低头的熊,喜欢美食、健身,当然也喜欢写代码,每天不定时更新各类编程相关的文章,希望你在码农这条路上不再孤单!

览器缓存历史简介

浏览器缓存实现一开始各家浏览器厂商标配的都是Cookies, 随着前端显示越来越复杂,Cookies那可怜的几K容量明显不够用了;在2000年至2008年间,没有统一标准出现了很多浏览器缓存的插件实现如:Flash SharedObject ,Google Gears;HTML5标准的提出,出现了很多缓存的标准如:localstorage ,webSql , IndexDb;HTML5大热的时候,离线Web应用市场一度被看好,相应的浏览器缓存技术也备受关注;大热后的今天, 我们慢下来静静的总(tu)结(cao)下浏览器的那些缓存技术。(HTML5 标准2006年提出,2014年才正式发布,提出约两年后开始被重视)

浏览器缓存实践

Adobe 插件存储(Flash SharedObject)跟Google插件存储(Gears SQLite)均需要安装插件且本人没使用过,暂时不写,日后有机会接触再补上;本文主要写HTML5离线存储标准实践以及实际开发中浏览器缓存的实现方案,因本文Demo代码量比较大,故主要贴上实现的核心代码;

1.localStorage、sessionStorage 是HTML5 规范,IE8就支持了,不同浏览器总大小不同,大概为5MB;

localStorage和sessionStorage的API都相同(用法一样),区别只在于关闭浏览器选项卡时sessionStorage的数据会消失而localStorage的会保留;用法灰常简单:

保存数据:

setItem('key', 'keyValue');

获得数据:

getItem('key');

删除数据:

removeItem('key', 'keyValue');

clear();

谷歌、safari(旧版)以及大部分国产浏览器的极速模式查看localStorage、sessionStorage的数据都是这样的:

2. Cookies 比较老的缓存实现方式,不同浏览器支持的Cookie 个数跟容量不同,容量大概4K;(各浏览器Cookie大小、个数限制)

Cookies用法相对于上述的localStorage会比较麻烦,因为缓存数据的增、删、改、查都是操作同一段字符串;关键代码:

document.cookie='xxx';

Cookie数据保存的时间、保存的路径、域名等都通过字符串拼接操作实现;PS: 部分浏览器(如chrome)需要部署在虚拟服务器才能操作Cookie;

3.userData(只有IE浏览器支持), Flash、Gears这类需要安装插件的缓存应用场景比较有限,本文不展开研究了,但考虑到国内IE浏览器的使用份额,userData比以上同时期两货实用的多,所以有必要展开下;

userData的实现就是页面加载时创建一个input标签,该标签首先调用:

load('file_name');

在C盘目录(路径下面详述)生成xml文件,然后用户交互产生的缓存数据通过给input标签添加(或删除)属性存储:

setAttribute('key', 'keyValue');

removeAttribute('key');

添加(或删除)属性后调用'save'方法就将结果保存到对应的xml文件了:

save('file_name');

userData存储的位置:

在XP下,一般位于C:\Documents and Settings\用户名\UserData,有些时候会在C:\Documents and Settings\用户名\Application Data\Microsoft\Internet Explorer\UserData。

在Vista下,位于C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\UserData。

PS: 使用userData时, 清空浏览器所有缓存都无法清除userData存储的数据,需要到上述文件夹下手动删除对应的xml文件才能清除成功;

4.webSql HTML5新增缓存机制,IE所有版本(包括edge) firefox均不支持, PC端目前基本无法投入使用;Web SQL Database

这么多浏览器不支持该标准的原因估计是API太复杂了!!!以下是它实现插入缓存代码,体验下:

基本是将sqlserver 、mysql那一套的语法拿过来了, 但偏偏前端浏览器又没办法实现如mysql那么强大的功能, 没有公主命却一身公主病;支持该方案的只有了chrome 、 safari :

PS: w3c 已表示不再维护,indexDb代替之。

5.IndexDb HTML5规范的另一缓存机制, 浏览器支持情况比websql好一些; IE10(edge14仍是部分支持)开始部分支持, firefox、chrome、Opera全支持、safari8开始部分支持;实际开发同上,暂时鸡肋;

上述的 webSql 基本成历史, IndexDb将代替它继续更新;但本人对它未来还是挺悲观的,为啥?如果说有哪个缓存标准的API比webSql难用 那一定是 IndexDb!

跟Cookie、localStorage实现相同功能它的代码是这样的:

上述代码仅仅是存入数据而已, 还有跟它同等长度的查询、插入代码;(indexDb增删改查的详细操作代码请看demo源码)总的来说该标准API对开发者及不友好;存入成功后,查看存储数据:

PS: 网上很多教程中的db.setVersion方法已被弃用,IndexDb标准最新版没有 setVersion 了,现在是 onupgradeneeded !

实际开发中,缓存使用:cookiesUtils、localStorageUtils

cookiesUtils: Cookie存储实现都是将参数拼接成字符串然后将字符串赋值给“document.cookie”, 实际项目中不可能经常拼接,所以都使用封装的Cookie库;附上本人写的cookiesUtils;

localStorageUtils:实际项目中另一常用的存储方案就是localStorage, 比Cookie好用且兼容大部分浏览器; 就目前而言唯一的不足是不兼容IE6 IE7, 如结合上述的userData将兼容所有浏览器,在低版本IE浏览器中使用userData实现localStorage方法,localStorageUtils就是这样的封装实现;

总结

HTML5 众多存储方案中,目前使用最为广泛的当然是 localstorage、sessionStorage了, 如考虑低版本浏览器,Cookies还是主流的选择;当然,浏览器端存储的数据容量毕竟有限,大数据还是得后台加载,分页或懒加载显示;

HTML4.0、XHTML到HTML5,从某种意义上讲,这是HTML描述性标记语言的一种更加规范的过程。因此,HTML5并没有给开发者带来多大的冲击。但HTML5增加了很多非常实用的新功能和新特性,下面具体介绍HTML5的一些优势。

1、 解决了跨浏览器问题

在HTML5之前,各大浏览器厂商为了争夺市场占有率,会在各自的浏览器中增加各种各样的功能,并且不具有统一的标准。使用不同的浏览器,常常看到不同的页面效果。在HTML5中,纳入了所有合理的扩展功能,具备良好的跨平台性能。针对不支持新标签的老式IE浏览器,只需简单地添加JavaScript代码就可以使用新的元素。推荐了解黑马程序员web前端课程。

2、新增了多个新特性

HTML语言从1.0到5.0经历了巨大的变化,从单一的文本显示功能到图文并茂的多媒体显示功能,许多特性经过多年的完善,已经发展成为一种非常重要的标记语言。HTML5新增的特性如下。

● 新的特殊内容元素,比如header、nav、section、article、footer。

● 新的表单控件,比如calendar、date、time、email、url、search。

● 用于绘画的canvas元素。

● 用于媒介回放的video和audio元素。

● 对本地离线存储的更好支持。

● 地理位置、拖曳、摄像头等API。


HTML5标准的制定是以用户优先为原则的,一旦遇到无法解决的冲突时,规范会把用户放在第一位。另外,为了增强HTML5的使用体验,还加强了以下两方面的设计。

● 安全机制的设计

为确保HTML5的安全,在设计HTML5时做了很多针对安全的设计。HTML5引入了一种新的基于开源的安全模型,该模型不仅易用,而且对不同的API(Application Programming Interface,应用程序编程接口)都通用。使用这个安全模型,不需要借助于任何不安全的hack就能跨域进行安全对话。

● 表现和内容分离

表现和内容分离是HTML5设计中的另一个重要内容。实际上,表现和内容的分离早在HTML4.0中就有设计,但是分离的并不彻底。为了避免可访问性差、代码高复杂度、文件过大等问题,HTML5规范中更细致、清晰地分离了表现和内容。但是考虑到HTML5的兼容性问题,一些陈旧的表现和内容的代码还是可以兼容使用的。

4. 化繁为简的优势

作为当下流行的通用标记语言,HTML5尽可能地简化,严格遵循了“简单至上”的原则,主要体现在这几个方面:

● 新的简化的字符集声明;

● 新的简化的DOCTYPE;

● 简单而强大的HTML5 API;

● 以浏览器原生能力替代复杂的JavaScript代码。 为了实现这些简化操作,HTML5规范需要比以前更加细致、精确。为了避免造成误解,HTML5对每一个细节都有着非常明确的规范说明,不允许有任何的歧义和模糊出现。


喜欢记得关注一下哦。