IndexedDB 中的最大项大小

IndexedDB 是一个浏览器中用于存储结构化数据的 API。它类似于关系数据库,但是它使用对象而不是表来表示数据。在大多数情况下,IndexedDB 可以存储大量数据,但是在存储数据时,它有一个最大项大小限制。

什么是最大项大小?

IndexedDB 的最大项大小指的是可以存储在数据库中的单个项的最大大小。这个限制对于所有主流浏览器都存在,并且要小于浏览器或操作系统的其他限制。

在 WebKit 和 Blink 内核的浏览器中(如 Chrome、Safari),最大项大小默认为 2GB。在 Firefox 中默认为 50MB。如果尝试存储超过最大项大小限制的数据,则会导致错误。

如何确定最大项大小?

可以使用以下代码确定当前浏览器中的最大项大小:

----- -- - ----------------------------- ---
------------------ - --------------- -
  ----- -- - --------------------
  ----- ----------- - ----------------------------------
  -------------------- ---- ------- -------------
--

此代码将打开名为 "test" 的数据库并检查其中的 object store,获取该对象存储的键路径的最大值。如果浏览器支持 IDBObjectStore.keyPath 属性,则该属性将返回最大项大小;否则将返回 null

如何避免超出最大项大小限制?

为了避免超出最大项大小限制,请注意存储的数据大小,并将大型数据拆分为可管理的块。可以使用 Blob 或 ArrayBuffer 等类型将数据分割成较小的块,然后在 IndexedDB 中存储这些块。

以下是一个示例代码片段,演示如何将数据拆分并存储在 IndexedDB 中:

----- -- - -------------------------------- ---
------------------ - --------------- -
  ----- -- - --------------------
  ----- ----- - --------------------------------
--

------------ - --------------- -
  ----- -- - --------------------

  -- -------
  ----- ---------- - ---- - ----- -- ---
  ----- ---- - --- -------------- - ------------
  ----- ------ - ---
  --- ---- - - -- - - ---------------- - -- ----------- -
    ------------------------- - - -------------
  -

  -- ---
  ----- ----------- - --------------------------- -------------
  ----- ----- - -----------------------------------
  --- ------ - --
  --- ------ ----- -- ------- -
    ---------------- --------
    ------ -- -----------------
  -
--

在上面的示例中,我们首先将要存储的数据拆分为大小为 1MB 的块。然后,我们创建数据库和对象存储,并将这些块添加到对象存储中。每个块都具有其在原始数据中的偏移量,以便在检索时可以重新组合它们。

结论

IndexedDB 是一个强大的浏览器 API,可以用于存储大量结构化数据。但是,在存储数据时要注意最大项大小限制,并根据需要拆分数据为可管理的块来避免超出这种限制。使用上述技术,您可以编写出高效而可靠的 IndexedDB 应用程序。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/28648