0

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 タスク後に速度が低下します。

問題は、他のランクを更新せずにタスクを挿入して表示できるように、ランクを構築する適切な方法があるかどうかです。

4

2 に答える 2

0

ランクを更新してすべてをレンダリングする別の方法を探すことをあきらめました。

データを 2 つの部分に分割しました。

  • 静的部分:コレクションを使用#eachして最初のビューを構築するreactive:false

  • リアクティブ部分: 新しいタスクを配置したり、ユーザー自身が実行したわけではないタスクを dom 内で削除または移動したりするカーソル オブザーバー。

500 ~ 700 の他のタスクの前に新しいタスクを簡単に挿入できました。満足しています。1000個のタスクで試しましたが、多すぎました。

于 2014-05-19T06:39:32.637 に答える
0

データベースの更新やページの書き換えなど、速度を低下させているものをテストしましたか? アプリケーションの簡単な複製を行ったところ、ブラウザ ページに 400 div の書き込みがあった場合、更新に時間がかかることがわかりましたが、データ コンテキストの出力を 50 行に制限したところ、非常にスムーズに感じられました。

私が取り組んでいる別のプロジェクトでは、データベースを更新するときにブラウザーにどれだけ要求するかについて、かなり注意する必要があることがわかりました。いくつかのテストが必要でしたが、そのプロジェクトでは、一度に更新したいのは 30 div で十分であることがわかりました。

于 2014-05-14T18:17:59.350 に答える