我正在使用 jqueryMobile + 淘汰赛 + 微风 + WebAPI 编写一个简单的“todo - helloworld”,以了解移动环境中的 SPA(单页应用程序)(不可靠的互联网连接)
为了启用离线使用,WebApp 将利用
- 应用程序缓存
- 本地存储
应用程序应尽可能使用远程数据库来加载和保存数据,但应能够在离线时无缝切换到本地存储,并在重新在线时同步本地/远程更改。
现在回到问题:应用程序将使用 Breeze 的 EntityManager 来管理数据(本地缓存和远程同步)
- “远程数据库”
为了减轻不一致/并发问题,我将使用 2 个本地存储密钥:
- “localDb”用于远程数据库的本地副本(待办事项列表)
- “localPendingChanges”表示应用程序无法提交到远程数据库的更改
所以流程或多或少是(伪代码):
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
您如何看待这种方法?是不是一团糟?可以吗?多用户场景下的并发问题怎么办?