【问题标题】:Meteor.call is very slow when responding backMeteor.call 响应时非常慢
【发布时间】:2021-07-04 21:52:43
【问题描述】:

我遇到了 Meteor.call() 的性能问题。我在服务器端有一个方法,可以在一毫秒内执行,但是当我在客户端寻求响应时,在回调函数中获取响应数据需要很长时间。有没有人遇到过这个问题?

我用的是 Meteor 1.12.1 并更新到 Meteor 2.1.1 希望通过更新来解决问题,但我没有发现任何区别。

更新:我在所有环境(osx、linux、windows)上都面临问题。

例如:这是我的服务器代码

Meteor.methods({
   newEntry() {
     //This method is executed within millisecond
   }
})

这是我的客户代码

function submitEntry(data) {
    Meteor.call(
        'newEntry',
        data,
        (error, res) => {
            //Here I am getting the response after long wait. 
        },
    );
}

有人可以帮我解决这个问题吗?

【问题讨论】:

  • all 你的方法只有一个会发生这种情况吗?我想这取决于方法本身。有什么方法可以创建一个最小的可重现示例?如果没有,请发布您的整个方法,特别是您用来验证方法本身是否快速执行的代码。
  • 另一个问题是响应有多大。如果它很大,可能只是发送所有数据的时间。
  • 我的回复很小。只是一个包含一个单词的字符串。我刚刚发现了这个问题,我和这个问题在同一条船上。你也可以检查一下吗? stackoverflow.com/questions/43225633/…
  • 我使用 Meteor.call 的所有方法都有同样的问题。服务器方法甚至不需要 1 秒,但是当我在客户端得到响应时需要很长时间。即使你对服务器方法什么都不做,它仍然需要很长时间。
  • 您是否还有用于原型设计的autopublish 包和大型数据库?

标签: meteor


【解决方案1】:

我找到了解决方案。根据 Meteor 文档。

一旦方法在服务器上完成运行,它会向客户端发送一条结果消息,其中包含在步骤 2 中生成的方法 ID 以及返回值本身。客户端存储这个供以后使用,但还没有调用方法回调。如果您将 onResultReceived 选项传递给 Meteor.apply,则会触发该回调。

参考:https://guide.meteor.com/methods.html#advanced-boilerplate

因此,如果您希望在服务器方法返回值后触发回调,那么您可以使用带有 onResultReceived 选项的 Metor.apply 方法。

Meteor.apply(
  "methodName",
  [...params],
  {
    onResultReceived: function() {
      // Whatever you want to do after callback. 
    }
  }

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2014-08-06
    相关资源
    最近更新 更多