2012-04-27 37 views
6

我修改排行榜爲例,使用兩個集合:如何管理哪些數據與Meteor客戶端的緩存同步?

Players = new Meteor.Collection("players"); 
Tasks = new Meteor.Collection("tasks"); 

的玩家集合在該示例中定義的6個文檔。

> db.players.count() 
6 

任務集合包含48,000個文檔。

> db.tasks.count() 
48000 

一旦我打開瀏覽器,節點跳轉到100%的CPU並且客戶端看不到任何任務記錄。

Players.find().count() 
6 
Tasks.find().count() 
0 

我試過定義查詢條件,但只適用於服務器,並沒有幫助客戶端。

Players.find({name:"Claude Shannon"}).count(); 
1 
Tasks.find({tid:"t36254"}).count(); 
0 

我猜48000個文檔太多了,無法同步。這導致Node與100%的CPU掛鉤,客戶端拋出這樣的錯誤:http://i.imgur.com/zPcHO.png

如何防止同步所有內容並僅檢索集合中的特定文檔?

+1

部分似乎是禁用自動發佈功能。 Autopublish使得一些簡單的例子可以用一些文檔「簡單地工作」,但是它對於更多的數據並不適用。在項目目錄中,使用'meteor remove autopublish'。然後編寫您自己的發佈和訂閱功能。 – 2012-04-27 07:27:49

回答

18

流星的自動發佈,將所有集合發佈到客戶端,非常令人印象深刻,並且使得事情工作得很快,但它有點像Rails腳手架功能 - 對於真實應用程序不是非常有用 - 它用於學習和原型設計。

默認情況下,流星會自動將集合中的每個文檔發佈到每個連接的客戶端。要關閉該行爲,刪除軟件包:

$流星刪除自動發佈

然後,學會使用手冊的發佈和訂閱功能,爲您提供您需要的控制:答案http://docs.meteor.com/#publishandsubscribe

+1

也刪除不安全:流星刪除不安全 – radtek 2014-10-18 17:28:38

+0

@radtek:爲安全起見刪除'insecure'軟件包是至關重要的,但應該注意刪除它並不能回答原來的問題。 – Clawsy 2018-01-17 11:53:16

+0

@Clawsy我的評論是對當前答案的補充,而不是完整的答案。 – radtek 2018-01-18 01:27:52