我有一个simple Chrome extension,它使用chrome.storage API在列表中存储任务。每次更新任务列表时,数组都存储到chrome.storage.sync。
我有两台笔记本电脑设置了Chrome扩展程序。我已经同时登录了同一个Google帐户。
有时当我更新第一台笔记本电脑上的任务列表时,第二台笔记本电脑将在几秒钟内反映更新。但其他时候,第二台笔记本电脑很长时间都没有收到更新。它非常不一致 - 有时如果我退出Chrome并在第二台机器上重新启动它,更新后的列表就会出现。
我在任何一台笔记本电脑上都没有出现任何控制台错误,并且任务在第一台机器上正确保存 - 它们只是没有转移到第二台笔记本电脑。
chrome.storage.sync API有一些限制,我试图弄清楚我是否违反了其中一个。最有可能的是:
10 MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE
"每分钟可以执行的最大设置,删除或清除操作次数,持续超过10分钟。将导致超出此限制的更新立即失败并设置runtime.lastError。"
我读到的方式是,只要连续10分钟内每分钟不超过10次操作(总共至少100次),就不会违反限制。如果我违反此限制,我会看到控制台错误或任务无法在本地保存。
一般情况下 - 有没有办法调试Chrome同步问题?它有望成为一个好消息吗?
答案 0 :(得分:5)
依赖chrome.storage.sync
存在问题,是的。
达到配额限制可能会将您的扩展程序列入内存黑名单,直到Chrome重新启动。
理论上,你可以通过chrome.storage.set
回调捕获配额错误,因为它会设置chrome.runtime.lastError
,并实现某种退避/缓冲。
在实践中,有anecdotal evidence Chrome(不是Google后端)黑名单的黑名单会破坏限制,并且这会在Chrome会话中持续存在(即使配额应该刷新)。截至2014-10-16,这是still not fixed。
无法等待/请求同步。
不幸的是,当前表单中的chrome.storage.sync
不会提供远程同步完成的事件,也不会在本地状态没有变化时出错。因此,如果您在开始时依赖某些值,则can't reliably wait for it。而且,正如Chrome开发人员所指出的那样,这可能会保持这种状态。
没有暴露国家信息。
实际上,忘记事件。如果启用了Chrome同步,则API甚至不会公开。如果这样做会解决很多问题,并暴露出最后一个已知的同步时间戳。它目前没有;这是feature request。
尽管如此,chrome.storage.sync
仍是一个有用的工具。但是,在使用它时,期望它不可靠,并始终注意速率限制;可能会实施自己的速率限制。
对于调试chrome.storage.sync
,您可以使用chrome://sync-internals
页面查看。