0

我刚刚在流星中编写了一个小程序,并使用在 Heroku 下运行的 MongoHQ。这个简单的应用程序将实时统计提交电子邮件的人数。您可以在此处找到示例:DearJJAbrams 这是集合:

Counts = new Meteor.Collection("supporters");

在客户端,我运行:

Template.CountWrapper.SupporterCount = function () {
    return  Counts.find().count();
};

Template.BodySupporter.events({
    'click .support-click' : function () {
      if ($("#supportInputName").val() != "") {
        Supporters.insert({name: $("#supportInputName").val()});
        $(".signup-form").fadeOut(600, function() {
          $(".thank-you-message").fadeIn(600);
        });
      }
      return false;
    }
})

问题是当用户提交他们的电子邮件时,数据库似乎做计数查询很慢。有没有更好的方法来处理这个?谢谢你。

4

1 回答 1

1

查看原始 DDP 套接字显示您正在将整个集合发送到客户端,因此实际上每个人都下载了整个“支持者”集合。

这看起来有点低效。这是因为您发送了整个集合(约 7000 条记录——在 DDP 线上,每条记录看起来约为 100 字节),总共需要下载近 1 mb 的数据。

所以必须先下载这些,然后才能显示计数。为什么不将计数存储在单独的集合中并仅将其发送下来?这样应该快得多。除非您在表格或某处提供完整的姓名列表,否则这样做可能会更好。

另一件事是在您的托管服务提供商上,您没有让 websockets 工作,因此流星回退到长轮询 (XHR),这在最初连接时会有点慢,因为所有这些额外的开销。您可能想查看介于两者之间的东西,通常是未配置为允许 websocket 请求通过的代理或防火墙。

于 2013-09-29T11:29:15.437 回答