与这个问题类似,IndexedDB 是否保证是持久的?IE。如果设备内存不足,Safari 将不会回收磁盘空间。
3 回答
Safari 有“ No Eviction policy ”,这意味着它不会在磁盘压力低时自动清理 IndexDB,无需用户手动执行。
IndexDB 是快速发展的功能之一,您可以随时期待不同的驱逐政策,而无需公告。您应该始终使用后备选项进行构建。
Chrome 有明确的持久存储选项,这将保证不会被驱逐,在用户批准持久存储时,我们可以期待 Safari 在某个时候做同样的事情,基于他们在实现 PWA 功能方面遵循 Chrome 的记录(尽管它需要数年时间,而且文档非常糟糕)。
根据WebKit 团队的这篇博文,不能保证 IndexedDB在 iOS 和 iPadOS 13.4 以及 macOS 上的 Safari 13.1 中保持不变。Safari 将在 Safari 使用 7 天后将其删除而无需与网站交互:
现在,ITP 已将剩余的脚本可写存储形式与现有的客户端 cookie 限制对齐,在 Safari 使用 7 天后,无需用户在网站上进行交互,就会删除网站的所有脚本可写存储。这些是受影响的脚本可写存储形式(不包括一些遗留网站数据类型):
- 索引数据库
- 本地存储
- 媒体键
- 会话存储
- Service Worker 注册和缓存
但是,如果您的 Web 应用程序安装在您的 Home Screen 中,IndexedDB 几乎可以保证是持久的,因为 Web 应用程序将有自己的使用上下文,并且由于其本质,它不可能使用 7 天不访问它来自的站点:
[...] 添加到主屏幕的 Web 应用程序不是 Safari 的一部分,因此有自己的使用天数计数器。它们的使用天数将与重置计时器的 Web 应用程序的实际使用情况相匹配。我们不希望此类 Web 应用程序中的第一方删除其网站数据。
不管上述情况如何,我个人都不相信 IndexedDB 用于任何类型的长期数据存储。我发现它很麻烦,不久前在 Safari 14.1.1 中完全崩溃了。
我没有明确的答案,但是在大型浏览器/桌面(基于电子)应用程序中使用 IndexedDB 超过 2 年之后,我会将多个数据丢失归因于 IndexedDB 或至少是 chrome 中的 IndexedDB。所以我的回答是否定的。不要依赖它。