HTML5技术

本地存储浅析 - 2778085001(2)

字号+ 作者:H5之家 来源:博客园 2016-07-16 12:00 我要评论( )

2007年,Google启动了Gears项目。Gears是一个开源的浏览器插件,目标是为浏览器提供额外的兼容功能(例如为IE提供geolocation的API)。Gears提供了一个API用来嵌入一个基于SQLite的SQL数据库。在得到用户的允许后,

2007年,Google启动了Gears项目。Gears是一个开源的浏览器插件,目标是为浏览器提供额外的兼容功能(例如为IE提供geolocation的API)。Gears提供了一个API用来嵌入一个基于SQLite的SQL数据库。在得到用户的允许后,Gears可以在数据库存储没有大小限制的数据。 Gears主要有以下特点: 

Desktop

让网页应用跟桌面进行更自然的交互。

Desktop

具有完整搜索功能数据库的本地存储。

Desktop

在后台运行Javascript以提供性能。


所以,本地存储事实上只是Gears的其中一个功能。一个嵌入式数据库对本地存储的需求来说是绰绰有余了,然而跟Flash一样,Gears只不过是一个插件,还是一个跟Flash的普及率不可相提并论的插件。而且作为一个插件,它对浏览器的支持也是不足够的,我们看看它的浏览器支持情况:

  • Firefox 1.5-3.6
  • Internet Explorer 6.0-8.0
  • 当然造成这个状况也有有原因,就是因为Gears项目已经停止更新了。 

    2010年,Google官方宣布逐渐放弃对Gears的支持,并把工作重点转移在HTML5上……

    globalStorage

    这是一个全局对象(globalStorage),它维护着各种公共的或者私有的,可以用来长时期保存数据的存储空间(例如,在多重的页面和浏览器会话之间)。目前只有Firefox 2+支持。 

    globalStorage不是一个Storage实例,而是一个包含StorageObsolete实例的StorageList实例。举个栗子:

    Firefox 2允许访问比当前文档域名层次高的存储的对象,例如在developer.mozilla.org上你可以访问mozilla.org或者org的存储对象。但是由于安全的因素在Firefox 3以上版本中则不再允许,你只能访问当前域名的存储对象。

    Web Storage

    鉴于以上本地存储的方案的各种不给力,一种更强力的本地存储技术的出现貌似是很顺应潮流的事情。Web Storage被设计出来的目的就是为了提供更大,更安全,更容易使用的存储方式。 

    需要注意的一点:我们说到Web Storage总是认为它是HTML5的东西,事实上,它并不是HTML5规范的一部分,它有自己独立的一份规范。 

    Web Storage可分为local storage和session storage。local storage提供了5MB的存储空间,而sessiong storage甚至没有限制。我们来看看local storage能为我们做什么:

    local storage跟session storage除了在存储空间上不一样外,在生命周期及存储事件等特性上的表现也不一样: 

    STORAGE
    类型大小限制生命周期对其他窗口和TAB的可用性支持的数据类型

    LocalStorage 每个浏览器的每个应用限制5MB。根据,用户可以根据需要增加这个限制,但是只有少数的浏览器支持。 保存在硬盘上直到被用户或者应用删除。 共享于运行同一个web应用的浏览器的所有窗口跟标签页。 只支持键-值对的字符串。

    SessionStorage 只受到系统内存的限制 只存活于使用它的窗口或标签页 只能由创建它的窗口或者标签页访问 只支持键-值对的字符串。


    可以看出,session storage只是会话级的存储,只有同一个会话的窗口或者标签页能访问它,并且会话结束数据也会同时销毁。而local storage是一种持久化的存储,就算关闭浏览器数据依然存在,并且能在多个窗口和标签页间共享数据。 

    下面我们来看看local storage是怎样在浏览器中共享数据的: 

    每个浏览器上的每个web应用都有自己的一个LocalStorage,大小限制为5MB,并能在所有的这个浏览器上的窗口和标签页间共享。例如,假设你在Chrome上运行MyWebApp,如果你在多个标签页和窗口上运行MyWebApp,它们共享相同的大小限制为5MB的LocalStorage数据。如果你在其他浏览器打开相同的应用,例如Firefox,那么这个新的浏览器将会有它自己的LocalStorage供它上面的窗口和标签页进行共享。请看下面图片: 

     

    LocalStorage只能存储键值对字符串类型的数据,如果你想保存其他类型的数据,你只能在保存的时候把数据转化为字符串,然后在读取的时候再转化回去。就像cookie一样,LocalStorage和SessionStorage可以被诸如Chrome上的Developer Tools,Sarafi上的Web Inspector等工具检测得到。通过这些工具,用户可以移除保存的数据或者查看访问的网页保存了哪些数据。 

    LocalStorage并不是安全的存储,它保存的数据并不会进行加密,所有不宜保存一些敏感的数据。 

    Web Storage还有个重要特性就是Storage事件。当LocalStorage或者SessionStorage的数据被保存,修改或者删除的时候,当前窗口或者标签页的Storage事件就会触发。触发的Storage事件对象包含了事件发生时的storage对象,URL以及变化前后的键值。需要注意的时候,虽然规范里要求Storage事件在同一个浏览器里能被所有的窗口或者标签页触发,但是只有少数的浏览器实现了这个功能。另外,如果storage被清空了,那么事件不会包含任何被删键值对的信息。 

     

    StorageEvent对象包含了以下的方法: 

    方法描述

    getKey 返回被修改的键。

    getNewValue 返回被修改后的键值,如果值没有修改或者调用的是Storage.clear()的话,则返回null。

    getOldValue 返回被修改前的键值,如果值没有修改或者调用的是Storage.clear()的话,则返回null。

    getStorageArea 返回触发事件的SessionStorage或者LocalStorage对象。

    getURL 触发当前存储事件的页面的url。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 前端实现搜索记录功能也就是天猫app历史记录存储方便浏览 - 今天的代码你撸了嘛

      前端实现搜索记录功能也就是天猫app历史记录存储方便浏览 - 今天的代

      2017-04-12 14:00

    • 浓缩的才是精华:浅析GIF格式图片的存储和压缩 - 腾讯云技术社区

      浓缩的才是精华:浅析GIF格式图片的存储和压缩 - 腾讯云技术社区

      2017-04-07 15:08

    • HTML5本地图片裁剪并上传 - QxQstar

      HTML5本地图片裁剪并上传 - QxQstar

      2017-03-25 14:00

    • localStorage 如何存储JSON数据并读取JSON数据 - 陌年古城

      localStorage 如何存储JSON数据并读取JSON数据 - 陌年古城

      2017-02-13 18:00

    网友点评
    /