7

все. Я начал разрабатывать небольшие расширения с использованием различных API-интерфейсов Chrome, и, хотя все работает отлично, мне все еще интересно несколько вещей.Chrome.Storage.Local Persistence

Два вопроса, если вы не возражали бы помогать мне:

1. Может кто-нибудь сказать мне, что эти пределы, чтобы chrome.storage.local настойчивость? Я пробовал различные тесты самостоятельно, например, хранение нескольких вещей с помощью chrome.storage.local.set(), очистка всей истории моего браузера, куки-файлов и т. Д., А затем просмотр, если все еще есть. Часто он все равно будет там, но иногда я проверю позже, и он исчезнет. В целом, я не смог окончательно обозначить, что я делаю, что иногда очищает данные .local.

2. Я работаю в основном с chrome.storage.sync до сих пор, пока все не подписываются при помощи Хрома «Войти в Chrome» особенность. Я прочитал на странице API, что в случае использования .sync, когда Chrome находится в автономном режиме (а также не вошел в систему, я предполагаю, что это мой случай), данные хранятся локально, а затем синхронизируются позже. Моя главная проблема заключается в том, означает ли это, что данные, которые я храню с использованием chrome.storage.sync, могут быть стерты, поскольку данные, которые я храню с использованием chrome.storage.local, в прошлом? Одна из основных причин, по которым я использовал .sync, - это потому, что у меня никогда не было опыта с данными, которые были стерты с ним, в то время как у меня есть .local (как я описал в № 1).

Большое спасибо! Помогите мне, пожалуйста!

Edit: Я довольно уверен, что .local ясно не происходит из-за меня по ошибке удалить это расширение, а затем добавить его обратно в я знаю, что что очистит .local данные (но сохранить. .sync).

ответ

17

Я являюсь автором этого API.

chrome.storage.local не должен исчезать, кроме как при удалении (что похоже на ваш случай) или, очень редко, при повреждении базы данных (и мы это особенно часто наблюдаем при восстановлении системы).

chrome.storage.sync работает одинаково, за исключением того, что алгоритм слияния, который он использует, может привести к потере данных, если 2 машины совершают конфликтующие изменения. В вашем случае это может произойти, если вы входите в машину, использующую chrome.storage.sync. Чаще всего это связано с тем, что одна машина отключена при внесении изменений или, возможно, пользователю удалось одновременно изменить данные на двух машинах (поэтому рекомендуется только изменять данные о действиях пользователя - мы должны это сделать).

Для чего это стоит - и мы должны документировать это тоже - алгоритм слияния - это перемены с последними изменениями и sync-is-source-of-truth, но любые локальные пары ключей/значений не будут быть удалена. Если у Вас есть:

{а: 1, б: 2} на компьютере А (подписан в и синхронизации), {Ь: 3, C: 4} на компьютере B (не вошли в систему),

и компьютер B вступает, после полной синхронизации состояние хранения на обоих A и B заканчивается на {a: 1, b: 2, c: 4}, поскольку данные A уже являются частью синхронизации, это источник правда, но 'c' еще не существовало, поэтому было добавлено.

В этом случае A получит событие onChange, добавив 'c', и B получит событие onChange, добавив 'a' и обновив 'b' от 3 до 2.

+0

Большое спасибо! Очень информативно. Наверное, я только что полностью переустановил приложение и забыл об этом, а затем предположил, что .local ясно из-за чего-то другого. Означает ли это, что хранение в .local безопасно в течение относительно длительных периодов времени? –

+0

«sync-is-source-of-truth» определенно необходимо документировать. И что произойдет, если 'c' был явно удален A до начала B-синхронизации? Скажем, это было сначала добавлено, а затем удалено A. – Xan

+0

@kalman. Есть ли способ использовать этот API google.storage для хранения сеанса, а не для локального хранилища? – sbru

Смежные вопросы