Web存储技术--WebStorage

Web开发中,必然会遇到需要临时或永久保存的数据。

传统用cookie保存在客户端,或通过sessionID关联session对象(如Servlet的HttpSession对象)保存在服务器端。

缺点是cookie实在太小,只有4k,已经无法应付现在的大数据时代了。而保存在服务器端很多时间根本没必要,本地保存一下即可,何必再和服务器交互一下呢?

因此HTML5出台了新的存储技术:WebStorage

WebStorage分为localStorage和sessionStorage(原本还有一个globalStorage,但在HTML5中已经被localStorage替代了)

localStorage:

即window.localStorage,通过setItem/getItem来保存获取数据。一旦保存后只能手动调用clear / removeItem来清理。

实例演示:页面上输入个人信息,提交表单后,希望将数据保存在本地,下次再打开同样画面时从本地取出数据自动填到表单中,可以省去每次手动填写的麻烦。

点击提交表单,将数据保存在本地的代码:

function doAply() {
	var info = {          //将表单内容保存在对象中,以便JSON化该对象
		name : "",
		male : "",
		address : "",
		phone : ""
	};

	info.name = document.getElementById("inputName").value;  //页面上获取Name
	var temp = document.getElementsByName("male");           //页面上获取Male
	for(var i=0; i<temp.length; i++) {
		if(temp[i].checked) {
			info.male = temp[i].value;
		}
	}
	info.address = document.getElementById("inputAddress").value;  //页面上获取Address
	info.phone = document.getElementById("inputPhone").value;      //页面上获取Phone

        localStorage.setItem("myPage_Info", JSON.stringify(info));   //JSON化该对象后,使用setItem方法保存至localStorage中
	document.P.submit();
}

检查浏览器端的localStorage,确实已经保存成功

再次打开页面,从localStorage中读出这些数据,自动填充到页面表单里:

window.onload = init;

function init() {
	for (key in localStorage) {
		if(key == "myPage_Info") {
			var info = JSON.parse(localStorage[key]);    //解析JSON字符串成为一个对象

			document.getElementById("inputName").value = info.name;   //此处开始将对象的属性填充到页面表单里
			var temp = document.getElementsByName("male");
			for(var i=0; i<temp.length; i++) {
				if(temp[i].value == info.male) {
					temp[i].checked = true;
				}
			}
			document.getElementById("inputAddress").value = info.address;
			document.getElementById("inputPhone").value = info.phone;
			break;
		}
	}
}

大功告成!

且慢。。。上述代码为何要将数据打包成JSON格式呢?因为localStorage是浏览器的BOM对象,简单地说是全局的。如果将页面的数据一个个保存(而非打包)的话,很快localStorage里面将涌现出大量数据,不便管理。而且非常容易遇到重名问题。因此需要事先考虑如何打包以避免烦人的重名问题。

sessionStorage:

即window.sessionStorage,不再赘述,它的API结构和localStorage完全相同,只要将上述代码中localStorage改成sessionStorage即可,其他代码一行不用改。

那localStorage和sessionStorage有和区别呢?

区别在于清理的时机,见下表:

○:动作后数据仍在

×:动作后数据清空

可见localStorage中一旦存入数据,该数据将永存(事实上将被浏览器保存到本地硬盘中),只有代码中调用localStorage.clear() / localStorage.removeItem(..)才能清理掉数据。

而sessionStorage中存入数据后,该数据的生命周期等于该页面的生命周期。如果关闭该页面或关闭浏览器,浏览器将自动将sessionStorage清空。如果打开新窗口,原先窗口页面关联的sessionStorage数据将在新页面中不可见。因此代码中调用sessionStorage.clear() / sessionStorage.removeItem(..)自然能清理掉数据,但通常不需要开发者操心清理数据的问题,靠浏览器就来清理吧。

WebStorage相比cookie有何优势呢?

cookie通常只有4K,而WebStorage默认有4M(具体多少以浏览器厂商的说明为准),是cookie的一千倍。

如果你想知道你当前浏览器定义的WebStorage究竟有多大,可以写个测试脚本运行一下:

localStorage.clear();
localStorage.setItem("fuse", "-");
while(true) {
    var fuse = localStorage.getItem("fuse");
    try {
        localStorage.setItem("fuse", fuse + fuse);
    } catch(e) {
        alert("Your browser blew up at " + fuse.length + " with exception: " + e);
	break;
    }
}
localStorage.removeItem("fuse");

本人的Firefox试验下来localStorage有4194304=4096*1024,4M大小。

非要说WebStorage相比cookie有何劣势的话,可能就是性能问题了。第一次访问本地硬盘数据肯定会耗时一点。但本人不认为这是个问题,除非你的应用程序对性能要求异常严苛,否则实际证明这点所谓的”性能问题“根本不会造成任何影响,简单地说,普通人根本感受不到任何差异。想了解更多,可以参照:

http://calendar.perfplanet.com/2012/is-localstorage-performance-a-problem/

时间: 2024-08-23 18:29:01

Web存储技术--WebStorage的相关文章

web存储之webstorage

web存储分类 客户端和服务端 认识web存储 随着web应用的发展,是的客户端存储的用途越来越多,然而实现客户端端存储的方式也是越来越多样化.最简单最兼容的方式就是cookie,但作为真正的客户端存储cookie还是存在着许许多多的弊端的.同时,各种浏览器也有属于自己的存储方式.例如,IE6以及以上版本中可以使用userData Behavior,在Firefox中可以使用globalStorage,而在Flash插件还可以使用Flash Local Storage,但是这几种方式存在着兼容性

H5 web 存储之 Webstorage

H5提供了两种在客户端存储数据的方式:localStorage 持久化的本地存储(浏览器关闭重新打开数据依然存在)sessionStorage 针对一个session的本地存储之前这些都是由cookie来完成的,cookie的特点是存储量小,在服务器和客户端之间来回传递,传输效率不高.一般可以在判断注册的用户是否登录该本网站.webStorage API 继承于Window对象,并提供了两个新的属性-Window.localStorage 和 Window.sessionStorage.webS

HTML5 Web存储(Web Storage)技术及用法

在如今的Web开发中,HTML5是大家讨论的最大一个话题.HTML5提供的新功能特征使得Web程序员如虎添翼,并免去了以往钻研各种方法来让网站更好.更快.更灵活的气力.这些新功能中有一个非常让我感兴趣,它就是Web存储(Web Storage).Web存储(Web Storage)提供了一个在浏览器端保存用户会话信息的方法.下面让我们来看一看Web存储(Web Storage)的基本用法! Web存储(Web Storage)基本要领 存储的数据可以是任何类JSON的结构化数据. 存储的数据不会

Web存储机制—sessionStorage,localStorage使用方法

Web存储机制,在这里主要聊有关于Web Storage API提供的存储机制,通过该机制,浏览器可以安全地存储键值对,比使用cookie更加直观.接下来简单的了解如何使用这方面的技术. 基本概念 Web Storage 包含两种机制: sessionStorage为每一个给定的源维持一个独立的存储区域,该区域在页面会话期间可用(即只要浏览器处于打开状态,包括页面重新加载和恢复) localStorage同样的功能,但是在浏览器关闭,然后重新打开后数据仍然存在 这两种机制是通过Window.se

云存储技术优势及其发展趋势的探讨

云存储技术优势及其发展趋势的探讨 1.引言 近年来,由于信息技术的发展,科学计算和商业计算等众多应用领域会产生了规模相当巨大的数据,并且数据量仍在快速增加,呈海量形式发展.在科学计算方面,如物理学.天文学.生物学等领域都会产生规模庞大的数据,而且每年的数据规模达到若干PB.而在商业计算方面,Web搜索.社会网络等需要处理的数据规模也非常庞大,例如,Google和Facebook等应用产生的数据达到PB甚至EB级.按照摩尔定律,处理器的速度每18个月就会翻一番,光纤技术的发展也大大加快了数据在网络

Web开发技术发展历史

Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互联网".Web是World Wide Web的简称,中文译为万维网."万维网"和我们经常说的"互联网"是两个联系极其紧密但却不尽相同的概念.今天"互联网"三个字已经承载了太多的内涵,提到互联网,我们通常想到的一种战略思维,或者是一种颠覆传统的商

关于云存储技术的五个问题

云存储技术当然不是科学项目,但是它对企业组织的部分甚至所有数据都是适用的. 下面是5个关于云存储技术的关键问题,它们将有助于企业用户决定是否采用云存储技术. 1. 什么是云存储技术,它是如何工作的? 一百个人对于这个问题会有一百种不同的答案.从根本上来说,云存储技术是一种实用型服务,它可以为众多用户提供一个通过网络访问的共享存储池. 存储云是可以调整的,它们可以很轻松地扩展或根据客户需求定制. 2. 公共云与私有云之间有什么不同? 公共云是一种即付费即使用的存储服务. 它的所有组件都处于客户的防

吓哭原生App的HTML5离线存储技术,却出乎意料的容易!【低调转载】

吓哭原生App的HTML5离线存储技术,却出乎意料的容易![WeX5低调转载] 2015-11-16 lakb248 起步软件 近几天,WeX5小编编跟部分移动应用从业人士聊了聊,很多已经准备好全面拥抱HTML5.但WeX5小编编也发现,依然有相当一部分从业者,仍然对HTML5将信将疑,仍对原生App技术恋恋不舍.小编编特意转发分享下文,HTML5技术崛起,从离线存储技术是可见一斑的. (正文)随着Web App的发展,越来越多的移动端App使用HTML5的方式来开发,除了一些Hybrid Ap

Web挖掘技术

一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据挖掘是一项综合技术,通过从Internet 上的资源中抽取信息来提高Web 技术的利用效率,也就是从Web 文档结构和试用的集合中发现隐含的模式. 数据挖掘涉及的学科领域和方法非常多,有多种分类法. (1)依据挖掘对象分:关系数据库.面向对象数据库.空间数据库.时序数据库.DNA 数据库.多媒体数据库.