Web 存储概览

Marc Cohen

请务必为本地设备存储空间和基于云的服务器存储空间选择合适的存储机制。良好的存储引擎可确保可靠地保存您的信息、降低带宽并提高响应速度。合适的存储缓存策略是实现离线移动网络体验的核心构成要素。

本文简要介绍了评估存储 API 和服务的基础知识,之后我们将提供一个对比表格和一些一般性指南。我们计划在不久的将来添加更多资源,以便您更深入地了解特定存储主题。

存储分类

首先,我们来了解一些可用于分析 Web 应用数据存储情况的维度。稍后,我们将使用此框架枚举和评估可供 Web 开发者使用的众多存储选项。

数据模型

用于存储数据单元的模型决定了数据在内部的组织方式,这会影响存储和检索请求的易用性、费用和性能。

  • 结构化:数据存储在具有预定义字段的表中(这在基于 SQL 的数据库管理系统中很常见),非常适合灵活、动态的查询,在这种情况下,可能无法事先知道所有查询类型。浏览器中结构化数据存储的典型示例是 IndexedDB。

  • 键值对:键值对存储空间和相关的 NoSQL 数据库能够存储和检索按唯一键编入索引的非结构化数据。键值对数据存储区与哈希表类似,它们允许在常量时间内访问编入索引的不透明数据。键值对数据存储区的典型示例包括浏览器中的 Cache API 和服务器上的 Apache Cassandra。

  • 字节流:这种简单的模型会将数据存储为可变长度的不透明字节字符串,并将任何形式的内部组织交给应用层。这种模型特别适用于文件系统和其他分层组织的数据 blob。字节流数据存储的典型示例包括文件系统和云存储服务。

持久性

您可以根据数据的持久化范围来分析 Web 应用的存储方法。

  • 会话持久性:只有在单个网络会话或浏览器标签页保持活跃状态时,此类别中的数据才会保留。具有会话持久性的存储机制示例是 Session Storage API。

  • 设备持久性:此类别中的数据会在特定设备上跨会话和浏览器标签页/窗口保留。具有设备持久性的存储机制示例是 Cache API。

  • 全局持久化:此类别中的数据会在各个会话和设备中保留下来。因此,它是最可靠的数据持久化形式。具有全局持久性的存储机制的一个示例是 Google Cloud Storage。

浏览器支持

开发者应选择最适合其问题领域的 API;不过,他们还应考虑到,标准化且成熟的 API 比自定义或专有接口更为理想,因为它们的生命周期往往更长,并且获得的支持更广泛。他们还可以获得更广泛的知识库和更丰富的开发者生态系统。

交易

通常,一组相关存储操作以原子方式成功或失败非常重要。数据库管理系统传统上使用事务模型支持此功能,其中相关更新可以分组为任意单元。虽然这并不总是必要的,但在某些问题领域中,这是一种方便的功能,有时甚至是必不可少的功能。

同步/异步

某些存储 API 是同步的,这意味着存储或检索请求会阻塞当前活动的线程,直到请求完成为止。在 Web 浏览器中,这种情况尤其繁重,因为存储请求会与界面共享主线程。出于效率和性能方面的原因,建议使用异步存储 API。

在 Chrome 开发者工具中调试存储

请参阅以下文档,详细了解如何使用 Chrome 开发者工具检查和调试您选择的 Web 存储空间 API。此处未提及的 API 在 DevTools 中不受支持或不适用。

如果您使用多个存储空间 API,请查看 DevTools 的“清除存储空间”功能。借助此功能,您只需点击一个按钮即可清除多家商店。如需了解详情,请参阅清除服务工件、存储空间、数据库和缓存

下一步做什么…

现在,我们已经介绍了一些有关存储机制的相关思考方式,并比较了目前最热门的 API 和服务。我们很快就会添加更多内容,以便更深入地探讨一个或多个感兴趣的主题: