流星性能问题

时间:2019-05-16 14:53:01

标签: node.js performance meteor publish-subscribe

我们在项目中使用了流星V1.5 。我们注意到publishsubscriber方法的行为异常。从KADIRA发布一个subscriber的屏幕截图 enter image description here

publish方法

Meteor.publish( 'companyBuiltCourses', companyId => {  
    return BuiltCourses.find({ company_id: companyId })
});

当我们在subscriber下面使用并且访问xyz页面时,KADIRA会显示连续获取文档的信息,如屏幕截图所示。 即使我们访问了其他页面,该图也保持不变

Template.xyz.onCreated(function() {
   Tracker.autorun( () => {
     if (Meteor.user()) {
        Meteor.subscribe('companyBuiltCourses',Meteor.user().profile.company_id);
     }
   });
});

当我们使用下面的subscriber方法并访问xyz页面时,KADIRA会显示连续获取文档的信息,如屏幕截图所示。 但是当我们访问另一个页面时,此图下降到0。它将不再获取文档

Template.xyz.onCreated(function() {
   this.autorun( () => {
     let self = this;
      if(Meteor.user()){
        self.subscribe('companyBuiltCourses',Meteor.user().profile.company_id);
     }
   });
});

对于开发环境,这两种方法仅在需要时才获取文档一次。这是PRODUCTION问题。

我们正在远程托管MongoDB,并且我们在pm2上运行生产。我猜应该不应该连续提取。

1 个答案:

答案 0 :(得分:0)

由于提供的代码非常简单,因此很难判断发生了什么。我唯一能想到的是,跟踪器函数被重复调用。所以问题是,是什么原因造成的?

此代码:Meteor.user().profile.company_id建议您在user集合中根据用户个人资料存储数据。这不是很好,因为用户可以从控制台修改自己的数据,并且帐户系统有时还会修改用户记录,这可能会影响订阅触发的次数。无论如何,我建议将相关数据存储在单独的集合中,可以通过Meteor.userId()进行键控。我不确定这是否是答案。