https://github.com/meteor/meteor/tree/master/examples/unfinished/reorderable-listのようにドラッグアンドドロップで todo リストを作りたいです。
問題は、ランクを適切に処理する方法がわからないことです。上記の例を試してみましたが、ビルドランクが変化しなくなるまで問題なく動作します
そこで、新しいタスクを挿入するたびに、または 1 つのタスクのランクを変更するたびに、ToDo リストを並べ替える方がよいと考えました。
クライアントでの最初の試行:
var dropRank=1 Tasks.find({rank:{$gt:dropRank-1}},{fields:{_id:1}}).forEach( 関数(タスク){ Tasks.update(task._id,{$inc:{rank:1}}) })) Tasks.insert({rank:dropRank})
タスクが 150 個以下になると、新しいタスクをランク 1 に挿入したり、ランクを並べ替えたりするのが遅くなります。
サーバーで 2 回目の試行 (Meteor.method または collection.hook を使用):
Tasks.update({rank:{$gt:dropRank-1}},{$inc:{rank:1}},{multi:true})
~150 のタスクの後、ランクがクライアントでゆっくりと更新されることがわかります。
ローカル コレクションで試してみると、400 タスク後に速度が低下します。
問題は、他のランクを更新せずにタスクを挿入して表示できるように、ランクを構築する適切な方法があるかどうかです。