読み込み画面を作成するために、pouchdb がレプリケートされるときの変更を追跡しようとしています。
それぞれに 2000 程度のドキュメントを含むいくつかのデータベースがあり、最初の読み込みにはかなりの時間がかかるため、アプリがバックグラウンドで何が起こっているかをユーザーに示す必要があります。
//define vars
var nameDB = "location";
var remoteDB = new PouchDB("http://localhost:5984/" + nameDB);
var localDB = new PouchDB(nameDB);
var localdocCount;
var localdocCounter = 0;
var remotedocCount;
//wrap replication in reusable function
function replicate(){
//replicate TO the server
PouchDB.replicate(localDB,remoteDB, {
continuous: false,
attachments: true
},
function(){
//on callback replicate FROM server
PouchDB.replicate(remoteDB,localDB, {
continuous: false,
attachments: true
},
function(){
//replicate FROM complete
);
});
//compact local database to keep size down
//all revisions are replicated to the server
//no need to keep them locally
localDB.compact();
}
//get the remote db info first and see how many documents it has
//remote update_seq how does it match up to localdb update_seq?
remoteDB.info(function(err, info) {
remotedocCount = info.doc_count;
console.log(info);
});
//get info for local db for comparison with remote
localDB.info(function(err, info) {
localdocCount = info.doc_count;
//Actually run the replication now that we have the
//remote and local db info
replicate();
//track any changes to the localdb
localDB.changes({
continuous: true,
onChange: function(){
//change detected increment counter
localdocCounter++;
console.log("Downloaded "
+ (localdocCount + localdocCounter)
+ " of " + remotedocCount + " to " + nameDB);
//localdocCount === The total Documents in the local database
//localdocCounter === The changes that have been made since
//remotedocCount === The amount of documents we need
}
});
});
上記のコードは、サーバーからクライアントにダウンロードされるドキュメントの量を追跡する試みです。
上記のコードは機能します。ドキュメントがダウンロードされていることがわかります。
ただし、これは最初の読み込みシナリオのみを処理します。ユーザーがドキュメントを更新するときはどうでしょうか?
ここで update_seq の出番だと思います。
しかし、 update_seq を使用して、必要な変更を正確に把握する方法がわかりません。
要約すると、変更が行われているかどうかはわかりますが、アプリケーションが最新の状態であると見なすために必要な変更の合計量を取得する方法はわかりません。
たぶん、このアプローチは完全にオフですか?