0

我正在构建一个应用程序,它应该能够列出数千篇带有分页/无限滚动的文章。用户应该能够过滤/排序这个列表,目前我在排序文章时遇到了性能问题。

我设置了一个非常基本的应用程序来演示这个问题: http: //meteor-paginated-subscription-example.meteor.com/(参见 Github:https ://github.com/lacco/meteor-paginated-subscription-example ) . 如果您打开 Firefox/Chrome 控制台并单击“创建于”/“优先级”以启动排序,您会看到Template.articles.rendered一键调用了数百次。您还看到表格需要一些时间才能“最终”,在加载和呈现期间,行的顺序经常发生变化。

我确信我在代码中做了一些废话,但我无法弄清楚我的问题的原因在哪里。你能帮我吗?

4

1 回答 1

0

collection.cursorModels.Articles.find({}, ...)是一个反应式数据源。对该光标中项目的任何更改都将导致articles_table`{{#eacharticles}} 中的模板和子模板重新呈现。

您的手段导致更改您的数据订阅,因此客户端调用服务器请求新数据。您看到的闪烁是由于新数据到达和旧数据被删除时显示的中间步骤引起的。if handle.ready()在从帮助程序返回任何内容之前尝试检查,Template.articles_table.articles以便仅在数据集完成时显示表格。

更新:响应评论中的其他功能请求。如果您存储“previousSort”并且在排序或限制更改时还存储“previousLimit”,您可以在客户端等待订阅准备就绪时显示您的旧查询并关闭反应性:

if ( handle.ready() ){
  return Models.Articles.find({}, {sort: sort, limit: limit});
}    
else {
  return Models.Articles.find({}, {sort: previousSort, limit: previousLimit, reactive: false});
}
于 2013-09-20T04:14:22.787 回答