【问题标题】:Is IndexedDB on Safari guaranteed to be persistent?Safari 上的 IndexedDB 是否保证是持久的?
【发布时间】:2021-10-26 19:35:42
【问题描述】:

类似于this question,IndexedDB 是否保证是持久的? IE。如果设备内存不足,Safari 将不会回收磁盘空间。

【问题讨论】:

  • 根据我目前使用 IndexedDB 作为 PWA 的经验,桌面 Safari 是稳定的,但 iOS Safari 不是。由于我们无法确定的原因,IndexedDB 数据似乎会定期擦除——有时似乎只是会话过期?这非常令人担忧,因此 defs 遵循 @anand 的进步并使用后备选项进行构建。

标签: safari mobile-safari indexeddb progressive-web-apps pwa


【解决方案1】:

Safari 有“No Eviction policy”,这意味着它不会在磁盘压力低时自动清理 IndexDB,无需用户手动执行。

IndexDB 是快速发展的功能之一,您可以随时期待不同的驱逐政策,而无需公告。您应该始终使用后备选项进行构建。

Chrome 有明确的persistent storage option,这将保证不会驱逐用户批准持久存储,我们可以期待 Safari 在某个时候这样做,基于他们在实现 PWA 功能方面跟随 Chrome 的记录(尽管它需要数年时间超级糟糕的文档)。

【讨论】:

  • IndexedDb 似乎属于“尽力而为”的存储策略,iOS Safari (11.3+) 暗示您的数据可能会在几周 (2-3) 不活动后被擦除(应用未使用) )。
【解决方案2】:

我没有明确的答案,但是在大型浏览器/桌面(基于电子)application 中使用 IndexedDB 超过 2 年之后,我会将多个数据丢失归因于 IndexedDB 或至少是 chrome 中的 IndexedDB。所以我的回答是否定的。不要依赖它。

【讨论】:

    【解决方案3】:

    根据this blog post from the WebKit team,IndexedDB不保证在 iOS 和 iPadOS 13.4 以及 macOS 上的 Safari 13.1 中持久。 Safari 将在 Safari 使用 7 天后将其删除,而无需与网站交互:

    现在 ITP 已将剩余的脚本可写存储表单与 现有的客户端 cookie 限制,删除所有 Safari 使用 7 天后网站的脚本可写存储 无需用户在网站上进行交互。这些是脚本可写的 受影响的存储形式(不包括一些旧网站数据类型):

    • 索引数据库
    • 本地存储
    • 媒体键
    • 会话存储
    • Service Worker 注册和缓存

    但是,如果您的 Web 应用程序安装在主屏幕中,IndexedDB 几乎可以保证持久化,因为 Web 应用程序将有自己的使用上下文,并且由于其本质,它'如果不访问它来自的站点,将无法使用它 7 天:

    [...] 添加到主屏幕的 Web 应用程序不是 Safari 的一部分 从而拥有自己的使用天数计数器。他们的使用天数将 匹配重置计时器的 Web 应用程序的实际使用情况。我们的确是 不要指望这样一个 Web 应用程序中的第一方有它的 网站数据已删除。

    不管上述情况如何,我个人都不相信 IndexedDB 用于任何类型的长期数据存储。我发现它很棘手,不久前在 Safari 14.1.1 中broke altogether

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2018-12-28
      • 1970-01-01
      相关资源
      最近更新 更多