В зависимости от структуры хранимых данных, вы можете обойтись с помощью localStorage. Каждый раз, когда вы вносите изменения в ключ локально (или добавляете новый), пометьте этот ключ как «грязный» (то есть несинхронизированный). При следующей синхронизации вы узнаете, какие ключи / значения нужно синхронизировать.
Например, если ваши данные:
localStorage['tab1'] = '{...}'
localStorage['tab2'] = '{...}'
delete localStorage['tab3']
Сохраните дополнительный мета-ключ для вашего механизма синхронизации:
localStorage['$syncinfo$'] = JSON.stringify({
dirty: ['tab1', 'tab2', 'tab3']
})
Затем, когда вы перейдете к синхронизации (примерно):
for(const key of JSON.parse(localStorage['$syncinfo$']).dirty) {
if(localStorage[key] !== undefined) {
// sync updated (or new) value to server
// remove key from dirty array
} else {
// remove deleted value from server
// remove key from dirty array
}
}
Конечно, вы захотите обрабатывать ошибки и обновлять грязный массив только после успешной синхронизации сервера. , но это простой способ выполнить то, что вы хотите, я надеюсь:)
Если вы ищете решение, которое делает это, вы можете попробовать localForage , который является localStorage- совместимый API, в сочетании с драйвером localForage, который синхронизирует данные в удаленном хранилище данных, таком как KVdb.io , или другом с совместимым драйвером. (Отказ от ответственности KVdb.io построен мной.)