收藏
回答

云开发 服务端callFunction 耗时几百毫秒

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 Bug 客户端 wx25a15c281d6e16ca 2.4.1

- 当前 Bug 的表现(可附上截图)

    在服务端,

    远程函数A 调用远程函数B,C。

    通过控制台查看耗时,A> B+C ,差很多。通过在代码开始和结尾打出Date.now(),发现A callFuntion B 的过程耗时太多,几百毫秒。

- 预期表现

    a. 提升callFuntion的性能,减少耗时到100ms以内?

    b.或者,提供一个类似像组件一样代码之间的调用,而不是远程函数的方式,去写 B 和 C。因为B 和 C可能是基础功能,会被复用,所以将B 和 C 直接写在A中也不合适,如果要改就要改很多地方。


- 复现路径


- 提供一个最简复现 Demo


A:

exports.main = function(){


    await cloud.callFunction('B');


    await cloud.callFunction('C');

}


最后一次编辑于  2018-11-30
回答关注问题邀请回答
收藏

2 个回答

  • 邓坤力
    邓坤力
    2018-11-30

    是指 B 执行很快,但是 A 到 B 的请求很慢才到达吗?


    麻烦提供下示例数据呢:

    - A 函数总执行耗时

    - B 函数总执行耗时

    - A 中打点记录的从调用 B 到 B 返回的耗时

    2018-11-30
    赞同
    回复 5
    • 好好学习,天天锻炼
      好好学习,天天锻炼
      2018-11-30

      A函数执行总耗时:3271.323ms

      B函数执行总耗时:1828.146ms(B 中还callFunction其他,所以下面还是以C为例,C比较简单,只是请求数据库)

      C函数执行总耗时263.525ms

      A调C开始时间(在callFunction之前Date.now().getTime()):1543582845702

      A调C结束时间(在callFunction之后Date.now().getTime()):1543582846448

      C开始时间(function 最开始Date.now().getTime()):1543582846315

      C结束时间(function return时Date.now().getTime()):1543582846315


      2018-11-30
      回复
    • 好好学习,天天锻炼
      好好学习,天天锻炼
      2018-11-30回复好好学习,天天锻炼

      update

      C结束时间:1543582846439


      2018-11-30
      回复
    • 邓坤力
      邓坤力
      2018-12-03回复好好学习,天天锻炼

      可以拿下这个 A 函数的 requestId 给我们查下?如果找不到了的话,再复现一个调用链路耗时长的 requestId 看看?

      2018-12-03
      回复
    • 好好学习,天天锻炼
      好好学习,天天锻炼
      2018-12-03回复邓坤力

      请求ID:f1bb38a5-f49f-11e8-9517-5254005d5fdb

          就是上面那些打点的requestID

      2018-12-03
      回复
    • 好好学习,天天锻炼
      好好学习,天天锻炼
      2018-12-03回复邓坤力

      还有一个问题,请问客户端调数据库和远程函数调数据,哪个性能更好?还是没关系?

      2018-12-03
      回复
  • 好好学习,天天锻炼
    好好学习,天天锻炼
    2018-11-30

    顺便问下,有没有类似于Redis的方案?鉴于callFunction响应那么慢……

    内存级的缓存可以不,不同的远程函数是共享同一内存吗?我是想问 类似于 lru-cache    的方案可行吗?

    2018-11-30
    赞同
    回复