Как я могу работать с подмножеством данных chrome.storage - PullRequest
0 голосов
/ 15 мая 2019

Я храню данные как объект в хранилище синхронизации для моего расширения.Иногда мне нужен прямой доступ к одному «листку» моего дерева, а иногда мне нужны все данные.Это выглядит так:

{
    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 Ответ

1 голос
/ 15 мая 2019

Благодаря следующим пунктам, предложенным wOxxOm:

  • Вы не можете "работать с подмножеством данных chrome.storage". Это как база данных: один ключ равен одной записи
  • Встроенное синхронизирующее хранилище крайне ограничено (100 КБ), поэтому вы никогда не превысите лимит сообщений (~ 128 МБ), FWIW, возможно, вы захотите использовать сжатие или другого облачного провайдера вообще.
  • P.S. foo.bar - это не иерархический путь, это просто строковый ключ для одной записи в хранилище

И поскольку здесь подтверждает, что я не могу получить все ключи с префиксом (без загрузки всего документа), кажется, что единственное жизнеспособное решение - это сделать следующее:

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

Это означает выполнение действий в два этапа и дублирование некоторых данных, но позволяет напрямую редактировать каждый элемент (someName / someOtherName и т. Д.), В то же время позволяя извлекать все данные исключения без загрузки не связанных между собой элементов (otherNode и т. Д.)

Примечание: в хранилище синхронизации все еще есть ограничение не более 512 элементов. Таким образом, существует ограничение на количество таких «ключей исключения», которые вы можете создать

...