流星是否为每个"发布"

时间:2015-08-08 13:20:17

标签: node.js caching meteor iron-router publish-subscribe

我使用Iron Router(带路由控制器),我想知道meteor是否保留缓存以便"发布"当页面(网址)改变时。

示例: 我想使用流星作为烹饪网站,所以我有一个有大量食谱列表的部分,我可以过滤这个列表(按主题,准备时间等)。因此,可能会有很多不同的列表。

(这是一个用例,但我的问题可能对经典架构有效:用户访问配方详细信息页面,然后离开...在服务器(发布配方数据)上为此订阅执行meteor clean缓存吗? )

如果我使用订阅,当我更改过滤器信息时,meteor是否会保留缓存?如果没有,如何在不使用缓存在本地用户数据库(和服务器上)上为每个请求使用的情况下如何做到?

对不起,我是流星的初学者,对我来说有点困惑。当我阅读有关meteor和发布/订阅的文档时,我认为我的应用程序使用会过度增加内存...

2 个答案:

答案 0 :(得分:1)

有多种情况需要考虑:

  1. 用户关闭页面并重新打开或刷新。
    在这种情况下,本机不保留任何订阅。

  2. 用户使用路由器更改页面(无重新加载或关闭页面),模板被销毁

    • 如果发布是在路由器控件内部完成的,则通常会在页面更改时取消(不保留)。我认为这对iron:routermeteorhacks:flow-router都有效。
    • 如果发布完成inside the template control,则会在销毁时取消。
    • 否则,如果在这些预定义的控件之外完成,则订阅不会被取消。
  3. 您需要适应这些行为。例如,如果您想要记住路由器页面中的订阅,则需要将它们存储在外部并以您自己的方式控制它们。

答案 1 :(得分:0)

afaik缓存是客户端,最小化。在您在客户端上订阅它之前,实际上不会使用服务器上的发布。即:

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

自己不做任何事情。客户订阅需要引用它。

如果您的食谱集合非常大并且您不希望将大量网络开销全部移动到客户端,那么您可以在订阅中实现服务器端搜索,例如使用{{3 }}