【问题标题】:Meteor template optimisation流星模板优化
【发布时间】:2015-01-10 23:02:18
【问题描述】:

我在看一些流星代码,我看到了这个:

Template.notifications.helpers({
  notifications: function() {
    return Notifications.find({userId: Meteor.userId(), read: false});
  },
  notificationCount: function(){
    return Notifications.find({userId: Meteor.userId(), read: false}).count();
  }
});

所以我想知道,这是优化的吗? 我的意思是,mongo 数据库会执行两个查询吗?服务器部分?客户端部分? (然后是迷你 mongo)

是否可以在第二个函数中使用先前的结果?我试过了

notificationCount = function(){
    this.notifications.length; 
....

但它不起作用,但也许流星记得以前的结果并使用它? 我肯定会在我的模板中返回一个 something.find() 以拥有一个光标,然后返回其他变量,例如:count,或者用字段或其他东西过滤它,所以我对这个问题很感兴趣。

哪位高手给我解释一下?非常感谢流星社区:)!

【问题讨论】:

  • 来自 Mongo 文档:Count 不执行查询,而是计算查询返回的结果。

标签: meteor


【解决方案1】:

您没有在服务器上执行 2 次查询,这最终成为最关键的地方。当您订阅数据时,数据会转到浏览器中名为 MiniMongo 的本地数据库。您可以在客户端上运行任意数量的查询,数据集(通常我们希望如此)很小,并且没有明显的性能损失。

如果您有一些性能问题,您可以将Notifications.find({userId: Meteor.userId(), read: false}) 的结果保存到 Session 或另一个 Reactive Dictionary。这将稍微提高性能,因为您节省了 Minimongo 的查询时间:解析、搜索等。

在服务器上,您应该尽可能小心。服务器中的瓶颈可能意味着您的整个应用程序无法达到预期的速度。

阅读有关内存数据库中 mini 的更多信息:https://www.meteor.com/mini-databases

【讨论】:

    【解决方案2】:
    1. 是的。在客户端,而不是在服务器端。
    2. 您可以在模板上使用 {{notifications.count}}。

    【讨论】:

      猜你喜欢
      • 2013-09-24
      • 1970-01-01
      • 2015-05-07
      • 2012-06-26
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多