本地数据持久化(或者也叫做浏览器本地存储)是一种在浏览器中长久保存数据的方法,在刷新页面,同域名内页面跳转之后仍然可以将数据保留,例如用户的偏好设置、记录已填表单项等,可以减少服务器存储压力,节省网络传输带宽,加快响应速度。目前通用、可靠的跨平台和跨浏览器的数据持久化方案只有cookie,但不幸的是,使用cookie来存储持久化的数据会遇到下列这几个问题:

大小:cookie的大小被限制在大约4K左右,IE6下每个域名下cookie中名值对上限是20个,超出则随机丢弃;其他浏览器一般限制在50个。

占用带宽:cookie信息会被附加在每一个http请求上被来回传送

复杂度:对cookie的操作(解析或增删改)需要成本。

    针对这些问题,现代浏览器已经实现了一种不需要依赖cookie的本地数据持久化的方法 ,这些方法相比起cookie都很简单易用,能过存储足够多的数据,并且可以不被附加在http请求上消耗网络带宽。但不幸的是,每一个浏览器的实现方案都不相同并且互不兼容,目前就有下面这四种迥异的本地数据数据持久化方案:

globalstorageFireFox 2.0+, IE 8 + (https://developer.mozilla.org/en/Storage)

localstoarage: HTML5标准 (http://dev.w3.org/html5/webstorage/)

openDatabase: Safari 3.1+ (http://webkit.org/misc/DatabaseExample.html)

userdata behavior: IE 5.5+ (http://msdn.microsoft.com/en-us/library/ms531424(v=vs.85).aspx)

    不同的存储方法有各自不同的大小限制,你可以不必关心用户使用的是哪种存储方法,但你需要了解一下他们所支持的存储容量的最小值,然后根据你所需要存储的数据大小作出决策。除了cookie,其他几种类型都可以支持我们在本地存储足够多的数据。

Cookie4k

gears:未知

flash:至少100k,超出一个阈值(?)时需要用户的允许

globalstorage5M

userdata(IE) 64k

localstorage:理论上为5Mhttp://dev.w3.org/html5/webstorage/#disk-space

openDatabase:默认200k[来源请求]

最后需要注意的是,本地数据持久化均有域的限制,也就是不能超出当前的域进行数据的读写操作。