jqueryMobile +ノックアウト+そよ風+ WebAPIを使用して、モバイルコンテキスト(信頼できないインターネット接続)でSPA(シングルページアプリケーション)について学ぶ簡単な「todo - helloworld」を書いています。
オフラインでの使用を有効にするために、WebApp は活用します
- アプリケーションキャッシュ
- ローカルストレージ
アプリは、データの読み込みと保存に可能な限りリモート データベースを使用する必要がありますが、オフラインの場合はローカル ストレージにシームレスに切り替え、オンラインに戻った場合はローカル/リモートの変更を同期できる必要があります。
質問に戻ります。アプリは Breeze の EntityManager を使用してデータを管理します (ローカル キャッシュとリモート同期)。
- 「リモートデータベース」
不整合/同時実行の問題を軽減するために、2 つの localstorage キーを使用します。
- リモート データベースのローカル コピー用の「localDb」(todo のリスト)
- アプリがリモート データベースに送信できなかった変更の「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
このアプローチについてどう思いますか?めちゃくちゃですか?大丈夫ですか?マルチ ユーザー シナリオでの同時実行の問題についてはどうでしょうか。