如何清理未使用的 indexeddb 数据库
How are unused indexeddb databases cleaned up
我正在使用 IndexedDB 作为本地存储并且运行良好。由于过于详细的原因无法在此处展开,我通常只创建一个数据库并使用它,但在某些情况下我需要创建更多。在某些情况下,这些额外的数据库可能最终 "orphaned" 或未被使用,并且在未来不再需要。未使用的 IndexedDB 数据库是否以某种方式 "age out" 某种本地存储缓存(大概以某种特定于浏览器的方式)?我不介意自己进行清理,但由于似乎没有确定的方法来获取现有数据库的列表,所以我不确定该怎么做。用户仅删除所有数据库的能力似乎有点生硬……
我想我可以保留一个主数据库,其中包含所有现有数据库的列表……但即便如此,我认为我实际上也无法删除它们。我认为我能做的最好的就是清空它们。
感谢您的见解。
如果您没有明确删除数据库,通常它会保留在那里。但是有两种情况会被删除:
用户删除。例如,在Chrome中,如果用户清除"cookies and site data",所有IndexedDB数据库将被删除。
浏览器删除。从技术上讲,浏览器可以随时删除任何 IndexedDB 数据库。实际上,这种情况极少发生,甚至可能永远不会发生。从理论上讲,它应该在磁盘 space 为 运行 低时发生,但我从未见过它实际发生,即使我进行了人工测试,用完了虚拟机中的所有磁盘 space .
这意味着您通常可以非常确定 IndexedDB 数据库不会被删除,除非您删除它,但您不能依赖它。
如果不喜欢浏览器在存储压力下删除未使用的数据库,你可以要求它持久化存储
navigator.storage.persist()
那个return一个Promise
我正在使用 IndexedDB 作为本地存储并且运行良好。由于过于详细的原因无法在此处展开,我通常只创建一个数据库并使用它,但在某些情况下我需要创建更多。在某些情况下,这些额外的数据库可能最终 "orphaned" 或未被使用,并且在未来不再需要。未使用的 IndexedDB 数据库是否以某种方式 "age out" 某种本地存储缓存(大概以某种特定于浏览器的方式)?我不介意自己进行清理,但由于似乎没有确定的方法来获取现有数据库的列表,所以我不确定该怎么做。用户仅删除所有数据库的能力似乎有点生硬……
我想我可以保留一个主数据库,其中包含所有现有数据库的列表……但即便如此,我认为我实际上也无法删除它们。我认为我能做的最好的就是清空它们。
感谢您的见解。
如果您没有明确删除数据库,通常它会保留在那里。但是有两种情况会被删除:
用户删除。例如,在Chrome中,如果用户清除"cookies and site data",所有IndexedDB数据库将被删除。
浏览器删除。从技术上讲,浏览器可以随时删除任何 IndexedDB 数据库。实际上,这种情况极少发生,甚至可能永远不会发生。从理论上讲,它应该在磁盘 space 为 运行 低时发生,但我从未见过它实际发生,即使我进行了人工测试,用完了虚拟机中的所有磁盘 space .
这意味着您通常可以非常确定 IndexedDB 数据库不会被删除,除非您删除它,但您不能依赖它。
如果不喜欢浏览器在存储压力下删除未使用的数据库,你可以要求它持久化存储
navigator.storage.persist()
那个return一个Promise