我想用像https://github.com/meteor/meteor/tree/master/examples/unfinished/reorderable-list这样的拖拽做一个待办事项列表。
问题在于我不知道如何正确处理排名。我尝试了上面的例子,它工作正常,直到构建的等级不再改变
所以我认为每次插入新任务或更改一个任务的等级时重新排序我的待办事项列表会更好。
首先尝试使用客户端:
var dropRank=1 Tasks.find({rank:{$gt:dropRank-1}},{fields:{_id:1}}).forEach( function(task){ Tasks.update(task._id,{$inc:{rank:1}}) }) Tasks.insert({rank:dropRank})
在约150个任务之后,在第1级插入新任务并对排名重新排序变得缓慢。
第二次试用服务器(使用Meteor.method或使用collection.hook):
Tasks.update({rank:{$gt:dropRank-1}},{$inc:{rank:1}},{multi:true})
在约150个任务之后,我看到等级在客户端上慢慢更新。
如果我尝试使用本地收藏品,它会在400次任务后放慢速度。
所以问题是:是否有正确的方法来建立排名,以便我可以插入任务并显示它而不更新其他排名?
答案 0 :(得分:0)
您是否测试了什么减慢了您的速度:更新数据库或重写页面?我做了一个简单的应用程序复制,发现当有400个div写入浏览器页面时,更新确实需要一些时间来更新,但是当我将数据上下文的输出限制为50行时,它感觉真的很快。
对于我正在研究的另一个项目,我发现在更新数据库时我必须非常小心我对浏览器的要求。它花了一些测试,对于那个项目,我发现30个div几乎就是我想要一次更新的所有内容。
答案 1 :(得分:0)
我放弃了寻找更新排名和渲染所有内容的其他方法。
我将数据分为两部分:
静态部分:在集合上构建包含#each
和reactive:false
的第一个视图
反应部分:一个游标观察者,它将放置新任务,删除或移动dom中的任务,而不是用户本人。
我可以在500-700个其他任务之前轻松插入新任务,我很满意。我尝试了1000个任务,但实在太多了。