- 当前 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');
}
是指 B 执行很快,但是 A 到 B 的请求很慢才到达吗?
麻烦提供下示例数据呢:
- A 函数总执行耗时
- B 函数总执行耗时
- A 中打点记录的从调用 B 到 B 返回的耗时
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
update
C结束时间:1543582846439
可以拿下这个 A 函数的 requestId 给我们查下?如果找不到了的话,再复现一个调用链路耗时长的 requestId 看看?
请求ID:f1bb38a5-f49f-11e8-9517-5254005d5fdb
就是上面那些打点的requestID
还有一个问题,请问客户端调数据库和远程函数调数据,哪个性能更好?还是没关系?
顺便问下,有没有类似于Redis的方案?鉴于callFunction响应那么慢……
内存级的缓存可以不,不同的远程函数是共享同一内存吗?我是想问 类似于 lru-cache 的方案可行吗?