我刚刚在流星中编写了一个小程序,并使用在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;
}
})
问题是当用户提交电子邮件包含的数量时,数据库似乎对计数查询的速度很慢。有没有更好的方法来处理这个?
谢谢。
答案 0 :(得分:1)
查看原始DDP套接字会显示您将整个集合发送到客户端,因此实际上每个人都会下载整个“支持者”集合。
这看起来有点低效。这是因为你发送了整个集合(~7,000条记录 - 每条记录在DDP线上看起来都是~100字节),总共需要下载1 MB的数据。
所以必须先下载这些,然后才能显示计数。为什么不把计数存储在一个单独的集合中,只发送它?它应该快得多。除非你在桌面或某个地方给出完整的名单,否则最好这样做。
另一件事是在您的托管服务提供商上,您不会让websockets工作,因此流星会回到长轮询(XHR),这对于初始连接来说有点慢,因为存在所有这些额外的开销。您可能希望查看两者之间的内容,通常是未配置为允许通过websocket请求的代理或防火墙。