【问题标题】:Meteor Perfomance Issue流星性能问题
【发布时间】:2019-10-03 21:31:43
【问题描述】:

我们在我们的项目中使用 meteor V1.5。我们注意到 publishsubscriber 方法的奇怪行为。为subscriber 之一发布来自 KADIRA 的屏幕截图

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 上运行生产。我猜不应该有一个连续的提取。

【问题讨论】:

  • 您的BuiltCourses 收藏有多大?如果使用发布/订阅模式从服务器到客户端获取数据需要很长时间,您应该考虑将其更改为服务器方法。
  • 感谢您的评论。不,获取数据不需要时间。我只担心这个连续图。不应该

标签: node.js performance meteor publish-subscribe


【解决方案1】:

很难判断发生了什么,因为您提供的代码很简单。我唯一能想到的是,跟踪器函数被重复调用。那么问题来了,是什么原因造成的呢?

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

【讨论】:

  • 感谢 Mikkel 指出安全漏洞。我主要关心的是那个连续图。我同意您的观点,即跟踪器功能以某种方式被反复调用。
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 2013-12-05
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多