2013-02-20 129 views
2

我正在Meteor建立一个依赖数据库实时更新的应用程序。 Meteor展示这些示例的方式是在模板调用下进行数据库调用。我发现在处理中等大小的数据集时,这变得不切实际。我试图将请求移到服务器,并将结果传回客户端。流星客户端同步服务器数据库调用

我已经看过similarquestions SA,但没有找到即时答案。

这里是我的服务器端功能:

Meteor.methods({ 
    "getTest" : function() { 
        var res = Data.find({}, { sort : { time : -1 }, limit : 10 }); 
        var r = res.fetch(); 
        return (r); 
       } 
    }); 

和客户端:上面的代码

Template.matches._matches = function() { 
     var res= {}; 
     Meteor.call("getTest", function (error, result) { 
      res = result; 
     }); 
     return res; 
    } 

我曾尝试变化 - 在回调函数返回的一个例子。据我所知,有一个回调使该函数异步,所以它不能被称为onload(同步),并必须从客户端调用。

我想通过所有数据库查询服务器端来减轻前端负载。这在Meteor中可能吗?

感谢

回答

3

做到这一点的方法是使用订阅,而不是远程方法调用。请参阅文档中的counts-by-room example。因此,对于每个数据库调用,您都有一个仅存在于客户端的集合。然后服务器使用setunset决定集合中的记录。

+0

我已经将数据拆分为集合,不会这样做:console.log(“当前房间有”+ Counts.findOne()。count +“messages。”);仍然把负载放在客户端?据我所知,这和我目前正在做的事情是一样的,我想逃避。 – kyleredon 2013-02-20 11:20:46

+0

它确实会调用本地数据库,但Counts集合只包含一行,所以它非常快。当所有数据都在客户端时,使用客户端集合才会很慢。用'Meteor.publish'限制客户端的数据是否可以解决这个问题。 – 2013-02-20 11:27:29

+0

我明白了。所以我会尝试通过为每个希望运行的查询(每个页面)提供一个集合来解决这个问题。听起来像它会工作得很好,但。谢谢! – kyleredon 2013-02-20 11:46:50

相关问题