11

全部。我已经开始使用 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)。

4

2 回答 2

28

我是那个 API 的作者。

chrome.storage.local 不应该消失,除非是在卸载时(这听起来像是你的情况),或者很少会在数据库损坏时(我们已经看到这种情况特别发生在系统还原上)。

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

对于它的价值——我们也应该记录这一点——合并算法是 last-change-wins 和 sync-is-source-of-truth——但是添加的任何本地键/值对都不会被删除。如果你有:

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

并且计算机 B 登录,在进行完全同步后,A 和 B 上的存储状态将结束于 {a:1, b:2, c:4} 因为 A 的数据已经是同步的一部分,这是事实,但“c”还不存在,所以被添加了。

在这种情况下,A 将获得一个添加“c”的 onChange 事件,B 将获得一个添加“a”并将“b”从 3 更新为 2 的 onChange 事件。

于 2014-04-23T15:48:59.813 回答
0

我今天花了一些时间看这个工作。我的结果在https://github.com/mozilla/application-services/issues/2900#issuecomment-612251230。自接受答案以来,的行为chrome.storage.sync似乎发生了变化。特别是,似乎不再有任何合并行为。相反,它是全有或全无,同步服务器上的任何对象都“获胜”。删除被传输到服务器,但不会从服务器传输到其他客户端。

于 2020-04-10T22:48:37.443 回答