如何处理chrome.storage数据的子集

时间:2019-05-15 12:02:36

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

我正在将数据作为对象扩展存储在同步存储中。有时我需要直接访问我的树的一个“叶子”,有时我需要整个数据。看起来像这样:

{
    someNode: ...,
    otherNode: { ... },
    exclusions: {
         'someName': [
             item1Constant,
             item5Constant,
         ],
         'someOtherName': [ ... ]
    }
}

如何在不使用整个排除树的情况下更改someName下的常量数组?将所有“ someName”节点放在顶层而不使用排除包装程序似乎不是一个好的解决方案,因为在该级别也有其他数据。

以下更新仅是someName,还是会替换所有exclusions

 chrome.storage.sync.set({ 'exclusions' : { [someNameVar] : [...] } }, () => { ... });

该替代方案是什么-它会在排除文档上创建一个新节点,还是在顶层创建一个新节点,并在其名称中添加一个点?

 chrome.storage.sync.set({ ['exclusions.' + [someNameVar]] : [...] } }, () => { ... });

如何才能一次访问someName数据?我知道在顶层只能指定一个属性,但我不知道什么仅对“子节点”有效:

chrome.storage.sync.get(['exclusions'], (result) => { ... });

在这里我会期望对象表示法吗?我的怀疑是,没有

chrome.storage.sync.get({ 'exclusions' : { 'someNameVar' } }, () => { ... });

chrome.storage.sync.get(['exclusion.someNameVar'], () => { ... });

排除对象可能会变大,因此我不想使用完整的数据(Chrome对邮件大小有限制)

1 个答案:

答案 0 :(得分:1)

感谢wOxxOm提供的以下几点:

  • 您不能“对chrome.storage数据的子集进行操作”。就像一个数据库:一键等于一个条目
  • 内置的同步存储为extremely limited(100kB),因此您永远不会超过消息限制(〜128MB),您可能要完全使用压缩或其他云提供商的FWIW。
  • P.S。 foo.bar不是分层路径,它只是存储中单个条目的单个字符串键

并且由于here确认我无法获得所有带有前缀的键(不加载整个文档),因此似乎唯一可行的解​​决方案是执行以下操作:

{
    someNode: ...,
    otherNode: { ... },
    exclusions: [
         'someName',
         'someOtherName'
    ],
    'someName': [
         item1Constant,
         item5Constant,
     ],
     'someOtherName': [ ... ]
}

这意味着分两个步骤执行操作并复制一些数据,但是它允许直接编辑每个项目(someName / someOtherName等),同时仍允许检索所有排除数据而无需加载不相关的项目(otherNode等)。

注意:同步存储空间最多仍可限制512个项目。因此,您可以创建多少个“排除键”是有限制的