2015-08-08 82 views
0

我正在使用鐵路由器(與RouteControllers),我想知道流星保持緩存「發佈」時,頁(url)更改。是流星雨爲每個「發佈」

例如: 我想用流星作爲烹飪的地方,所以我有一大段食譜,我可以過濾這個清單(按主題,準備時間等)。所以,可能會有很多不同的列表。 (這是一個用例,但我的問題可以適用於經典模式:用戶訪問配方詳細信息頁面,然後離開...在服務器上發佈此配方的流星清理緩存(發佈配方數據) ?)

如果我使用訂閱,當我更改過濾器信息時,流星是否保持緩存?如果沒有,如何做到這一點,而不需要在本地用戶數據庫(和服務器上)緩存每個請求使用可以使?

對不起,我是流星初學者,對我有點困惑。當我讀到流星文檔和發佈/訂閱,我認爲我的應用程序使用量將增加內存過度...

回答

1

有多種方案的考慮:

  1. 用戶關閉該頁面,重新打開它或刷新。
    在這種情況下,任何訂閱都不會保留。

  2. 與路由器(無重載或頁面關閉)用戶更改頁面,模板被破壞

    • 如果報告是在路由器控制內部完成,它通常取消(不存),在頁面的變化。我認爲這對iron:routermeteorhacks:flow-router均有效。
    • 如果發佈已完成inside the template control,則銷燬時將被取消。
    • 否則,如果它是在這些預定義的控件之外完成的,則訂閱不會被取消。

您需要適應這些行爲。例如,如果您想要記住跨路由器頁面的訂閱,則需要將它們存儲在外部並按照自己的方式進行控制。

+0

哦,是的,所以如果這是典型的流程,這是一個非常好的消息!緩存是在我們加載模板(路由)時創建的,當我們銷燬模板時(例如,在Iron路由器中更改路由時),它是明確的。 – Yannis

+0

「取消」是什麼意思?在我用鐵製作的應用程序中:當我從一條路線導航到另一條路線時,前一條路線的數據仍然存在於集合中。只有當我明確*停止​​訂閱是實際卸載的數據。 –

+0

啊,那麼流星保留所有發佈的數據,無處不在,無時間限制或使用?你如何使用它不會過度增加內存? – Yannis

0

afaik緩存是客戶端,在minimongo。除非您在客戶端上訂閱,否則服務器上的發佈實際上並未使用。即:

Meteor.publish('allRecipes',function(){ 
    return Recipes.find(); 
}); 

本身不做任何事情。客戶訂閱需要引用它。

如果您的食譜集合非常大,並且您不想將大量網絡開銷移至客戶端,那麼您可以在訂閱中實施服務器端搜索,例如使用https://atmospherejs.com/meteorhacks/search-source

+0

好的,謝謝,我知道緩存只在客戶端(用戶)訂閱時創建。但我的問題是關於這個緩存何時被刪除,我認爲@Kyll回答了它。 – Yannis