2013-02-20 132 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