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

来源: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
投稿

猜你喜欢

  • Python定义一个Actor任务

    2022-05-30 09:24:50
  • vue3+vite使用环境变量.env的一些配置情况详细说明

    2024-04-26 17:38:40
  • MySQL常见错误提示及解决方法

    2008-02-23 10:08:00
  • asp如何利用当前时间生成随机函数?

    2010-01-01 15:44:00
  • python实现rsa加密实例详解

    2021-08-24 03:32:51
  • jupyter lab文件导出/下载方式

    2021-01-28 12:34:46
  • 可用于监控 mysql Master Slave 状态的python代码

    2023-01-05 07:39:30
  • [翻译]JavaScript中对象的层次与继承

    2008-12-31 13:36:00
  • Python logging管理不同级别log打印和存储实例

    2021-08-27 19:12:29
  • mysql5.7.17安装使用图文教程

    2024-01-19 16:08:43
  • python匿名函数lambda原理及实例解析

    2023-01-05 02:55:07
  • Golang 如何解析和生成json

    2024-04-27 15:32:58
  • Python画图实现同一结点多个柱状图的示例

    2021-04-21 23:26:04
  • 用Python实现群发邮件

    2023-10-30 20:04:36
  • 正解SQLSERVER 2005 sql排序(按大小排序)

    2024-01-15 18:34:36
  • 防采集,几种觉得有用的防采集方法

    2009-09-03 13:30:00
  • python3.6+selenium实现操作Frame中的页面元素

    2023-10-13 01:37:00
  • 写了一个小巧的jquery拾色工具

    2009-12-21 14:22:00
  • 解析pandas apply() 函数用法(推荐)

    2022-09-02 15:10:09
  • Python logging模块handlers用法详解

    2022-08-24 18:08:08
  • asp之家 网络编程 m.aspxhome.com