简单介绍各种浏览器中的本地存储方法

来源:aliued.com 时间:2012-04-26 16:37:34 

这片文章只对本地存储方法做介绍,若要查看本地存储组件使用方法的介绍请稍等。

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

大小:cookie的大小被限制在大约4K左右,IE6下每个域名下cookie中名值对上限是20个,超出则随机丢弃;其他浏览器一般限制在50个。
占用带宽:cookie信息会被附加在每一个http请求上被来回传送
复杂度:对cookie的操作(解析或增删改)需要成本。
针对这些问题,现代浏览器已经实现了一种不需要依赖cookie的本地数据持久化的方法 ,这些方法相比起cookie都很简单易用,能过存储足够多的数据,并且可以不被附加在http请求上消耗网络带宽。但不幸的是,每一个浏览器的实现方案都不相同并且互不兼容,目前就有下面这四种迥异的本地数据数据持久化方案:

globalstorage:FireFox 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)
另外,使用下面这些浏览器插件同样可以实现本地数据持久化:

Adobe Flash
Google Gear
依赖插件实现本地数据持久化会带来一个很明显的问题,就是那些没有安装这些插件的用户将被抛弃,并且你的应用将会被捆绑在一个特定的软件提供商身上(例如Adobe)。Google Gear这个技术在还没有被广泛部署就被Google抛弃了。Flash的装机率虽高,但也有自己的问题,例如:

许多用户阻止了浏览器中的flash或者需要一个单击操作才能够激活flash,这就使得flash很不适合用来作为一个透明的本地数据持久化解决方案
Flash在较新的64位机器上是出了名的不稳定
一些公司处于安全原因阻止了一切flash内容
不管怎么说,如果我们再算上Flash和Gear,这就意味着已经有至少6种互不兼容的方案可以实现本地数据持久化。

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

Cookie:4k
gears:未知
flash:至少100k,超出一个阈值(?)时需要用户的“允许”。
globalstorage:5M
userdata(IE) :64k
localstorage:理论上为5M(http://dev.w3.org/html5/webstorage/#disk-space)
openDatabase:默认200k[来源请求]
最后需要注意的是,本地数据持久化均有域的限制,也就是不能超出当前的域进行数据的读写操作。

TODO:

本地数据持久化是否可以控制过期时间(expired date)?
持久化到了本地的数据存在了硬盘的什么地方?
参考文献:

persist-js ReadMe (http://pablotron.org/software/persist-js/ )
Last Modified on Wednesday May 25th 2011 04:31:23 PM, Post Revisions:
This post has not been revised since publication.

标签:本地存储,浏览器
0
投稿

猜你喜欢

  • 关于文件命名

    2009-09-18 16:29:00
  • SQLServer中的切割字符串SplitString函数

    2011-12-01 08:14:09
  • asp精妙的SQL语句例子

    2008-03-04 17:42:00
  • 如何动态在文档中加入<script></script>写入大段js?

    2010-07-02 13:17:00
  • centos 安装mysql中遇到问题的解决办法

    2010-12-14 15:11:00
  • asp上传文件自动重命名方法

    2007-08-24 09:46:00
  • MySQL中InnoDB和MyISAM类型的差别

    2008-11-05 13:32:00
  • asp Response.flush 实时显示进度

    2011-04-14 10:31:00
  • sqlserver中求字符串中汉字的个数的sql语句

    2012-06-06 19:53:37
  • SQL Server数据库对于应用程序的关系

    2010-09-08 09:42:00
  • js 仿Photoshop鼠标滚轮控制输入框取值(修正兼容Chrome)

    2010-02-05 12:27:00
  • 请注意页面head区域的编码是不是规范

    2008-08-06 13:14:00
  • CSS样式和JavaScript脚本是否放置于外部文件的探讨

    2008-08-08 12:39:00
  • ajax+asp无限级分类树型结构

    2011-04-02 11:05:00
  • asp如何遍历目录及目录下的文件?

    2009-11-11 17:55:00
  • div水平垂直居中方法(淘宝招聘css题目)

    2007-10-25 12:48:00
  • Oracle对两个数据表交集的查询

    2010-07-26 12:51:00
  • asp select下拉菜单选择图标并实时显示

    2011-04-03 10:33:00
  • asp脚本延时 自定义的delay函数

    2008-04-07 12:59:00
  • 月影:function扩展

    2008-05-19 12:27:00
  • asp之家 网络编程 m.aspxhome.com