Chrome.Storage.Local持久性

时间:2014-04-22 04:40:00

标签: javascript google-chrome google-chrome-extension google-chrome-storage

所有。我已经开始使用Chrome的各种API开发小型扩展程序了,尽管工作得很好,但我仍然对一些事情感到好奇。

两个问题,如果你们都不介意帮助我:

1。有人能告诉我chrome.storage.local的持久性有什么限制吗?我自己尝试了各种测试,比如用chrome.storage.local.set()存储一些东西,清除所有浏览器历史记录,cookie等等,然后看看是否还有一切。它经常会在那里,但有时我会稍后再回来看看它会消失。总的来说,我无法明确地标记我正在做的事情,偶尔会清除.local数据。

2。到目前为止,我一直在使用chrome.storage.sync工作,而使用Chrome的“登录Chrome”功能登录。我在API页面上看到,在Chrome离线时使用.sync(以及未登录,我假设,这是我的情况),数据存储在本地,然后再进行同步。我主要担心的是,这是否意味着我使用chrome.storage.sync存储的数据可能会被删除,因为我使用chrome.storage.local存储的数据过去是什么?无论如何,我一直在使用.sync的主要原因之一是因为我从未有过使用它删除数据的经验,而我使用.local(正如我在#1中描述的那样)。

非常感谢!请帮帮我!

编辑:我很确定.local清除没有发生,因为我错误地删除了扩展程序,然后重新添加它。我知道将清除.local数据(但保留.sync)。

2 个答案:

答案 0 :(得分:19)

我是该API的作者。

chrome.storage.local除了卸载(听起来像你的情况)之外不应该消失,或者很少会出现数据库损坏(我们已经在系统还原中看到这种情况)。

chrome.storage.sync的工作方式相同,只是如果两台计算机发生冲突的更改,它使用的合并算法可能会导致数据丢失。在您的情况下,如果您登录使用chrome.storage.sync的计算机,则可能会发生这种情况。更常见的是,因为一台机器在进行更改时处于脱机状态,或者用户可能设法同时更改两台机器上的数据(这就是为什么建议仅更改用户操作的数据 - 我们应该记录)。

它的价值 - 我们也应该记录这一点 - 合并算法是最后更改 - 获胜和同步是真实的来源 - 但是添加了任何本地键/值对不会被删除。如果你有:

计算机A上的

{a:1,b:2}(已登录并同步), 计算机B上的{b:3,c:4}(未登录),

和计算机B登录,完成同步后,A和B两者的存储状态最终都会出现在{a:1,b:2,c:4},因为A的数据已经是同步,这是事实的来源,但是' c'还没有存在,所以加入了。

在这种情况下,A会有一个onChange事件添加' c'并且B将获得一个onChange事件添加' a'并更新' b'从3到2。

答案 1 :(得分:0)

我今天花了一些时间在工作上。我的结果是在https://github.com/mozilla/application-services/issues/2900#issuecomment-612251230。自从接受答案以来,remote: Enumerating objects: 57, done. remote: Counting objects: 100% (57/57), done. remote: Compressing objects: 100% (26/26), done. remote: Total 871 (delta 16), reused 47 (delta 15), pack-reused 814 Receiving objects: 100% (871/871), 11.93 MiB | 2.54 MiB/s, done. Resolving deltas: 100% (246/246), done. 的行为似乎已经改变。特别是,似乎不再有任何合并行为。取而代之的是,无论同步服务器上的任何对象“获胜”是什么都没有。删除操作会传输到服务器,但不会从服务器传输到其他客户端。