Piszę prosty „Todo - helloworld” z jqueryMobile nokaut + + + wietrze WebAPI poznać OSO (Single Page Application) w kontekście telefonii komórkowej (zawodne połączenia internetowego)Czy istnieją najlepsze praktyki/wzorce do synchronizowania danych lokalnych i zdalnych w SPA (aplikacje pojedynczej strony html5)?
Aby umożliwić wykorzystanie webapp nieaktywny wykorzysta
- Application Cache
- localStorage
App powinny stosować w miarę możliwości zdalnej bazy danych dla załadunku i zapisywanie da ta, ale powinna być w stanie płynnie przełączyć się na localstorage w trybie offline i zsynchronizować zmiany lokalne/zdalne po powrocie do trybu online.
Wracając do pytania: App użyje Breeze za EntityManager do zarządzania danymi (lokalnej pamięci podręcznej i zdalnego Sync)
- "remoteDb"
Aby złagodzić niespójności problemów/współbieżności bym użyj 2 kluczy localstorage:
- "localDb" dla lokalnej kopii zdalnej bazy danych (lista todos)
- „localPendingChanges” dla zmian App nie był w stanie złożyć do zdalnej bazy danych
więc przepływ będzie bardziej lub mniej Be (pseudokod):
LoadData
if(online)
load remoteDb
save localDb // save a local copy of the fresh loaded remotDb
if(localPendingChanges)
load localPendingChanges // we are merging in the Breeze entityManager remote data with localPendingChanges
Savedata // we are online and we have pending changes, so we should sync everything back to the remoteDb as soon as possible
if(offline)
load localDb
if(localPendingChanges)
load localPendingChanges // we are merging in the Breeze entityManager local data with localPendingChanges
SaveData
if(online)
save remoteDb
clear localPendingChanges // until we are online there is no need to keep localPendingChanges
LoadData // we are loading data from remoteDb to update our localDb to the latest version
if(offline)
save localPendingChanges // we are saving only the changes to localstorage
Co sądzisz na ten temat podejście? Czy to bałagan? Czy to jest w porządku? Co z problemami z współbieżnością w scenariuszu z wieloma użytkownikami?
Szukam dobrego podejścia. Chociaż mam wrażenie, że jest jeden lepszy, jest to bardzo dobry. +1 – rpax