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对每一个细节都有着非常明确的规范说明,不允许有任何的歧义和模糊出现。
喜欢记得关注一下哦。
*请认真填写需求信息,我们会在24小时内与您取得联系。