云函数性能优化指南:如何了解云函数运行情况并提升性能

2024-08-05
来源:网络整理

使用云开发一段时间后,你肯定会遇到一个问题:虽然云函数很方便,但是我的云函数的性能似乎不够好。为什么我的云函数每次加载都要 2 到 3 秒?太慢了!本文将告诉你如何提高云函数的性能。

如何了解云函数的运行状态?

在了解如何优化云函数的运行之前,我们需要先了解如何查看云函数当前的运行情况,以便进行对比。

打开小程序开发者工具,打开你的项目,进入你要调试的页面。打开调试器调用云函数,在调试器中切换到页面找到你的请求。点击你的请求后再切换到页面查看具体情况。

在这个页面中,你可以理解为(TTFB)就是你发起请求到收到返回结果第一个字节的时间,简单来说就是服务器计算结果所需要的时间,下载内容所需要的时间,你可以理解为网络速度的数据。

综上所述,如果 TTFB 值较大,则需要优化云函数性能。如果该值仍然较大,则需要优化网络情况。

优化TTFB云功能运行机制

TTFB优化就是对云函数性能的优化,在优化之前我们需要先了解云函数的运行机制,这样有助于我们理解如何进行性能优化。

当隐含时,确切顺序如下

用户发起请求,请求被发送到云开发后端,云开发后端的调度器将请求分发到下面的执行,容器创建环境,下载代码,执行代码

在这个过程中,对云开发的请求的发起,调度器的调度速度,调度器传递给容器的信息,函数调用等都是可以优化的,但是在具体的使用过程中,这些大部分都需要云开发的人员来完成。对于我们自己来说,只能把容器内部的东西尽可能的优化到代码层面。

接下来我们可以看看更详细的调用逻辑。

在云端开发中,我们可以将调用分为三种类型:

冷启动:图中红色阶段需要重新创建容器,下载代码,耗时最长。 温启动:图中黄色阶段需要下载代码,耗时较长。 热启动:图中蓝色阶段不需要下载代码,耗时最短。

我们看到最快的方式是热启动,不需要创建容器,也不需要启动函数,就可以直接执行函数,这显然比温启动和冷启动要快,因为温启动和冷启动需要创建容器或者下载代码,这样我们就有了第一种优化云函数性能的方法。

1. 每次调用时让云函数热启动

当我们可以让我们云函数的每一次调用都成为热启动,而不需要创建容器、部署函数的时候,请求速度自然会比冷启动、热启动更快。

我们可以测试一下,我设置云函数每秒调用一次,看看TTFB有什么变化。

setInterval(()=>{wx.cloud.callFunction({name:'profile'})},1000)

函数里面的代码是默认创建的云函数代码。

对应执行效果如下

可以看到,函数执行时间从首次启动的1.2s降低到了1.5s左右,性能提升了80%。我们只需要提高函数的调用频率,就可以提高函数调用性能。这就是热启动给我们带来的价值。

实施计划

小程序获取云开发数据_小程序云开发获取用户信息_小程序云开发读取数据库

如果你需要足够高的性能,不妨使用云端开发的定时器,定期唤醒你的容器,让你的容器保持存活,保证你的函数一直处于热启动状态。

2. 减少函数的大小

前面我们提到过,云函数在启动过程中会创建容器,并下载代码。创建容器的过程对于开发者来说是不可控的,但是我们可以通过一些方法来减小我们的代码大小,提高代码的下载速度,比如减小我们的函数代码的大小。

这里我们可以做一个测试,这里我创建了两个函数,两个函数的代码是一模一样的,不同的是在实验组的函数中我增加了一个temp变量的声明,这个变量的值是一个很长的字符串,导致两个函数的大小分别是68K和4K。

接下来我们看一下两者的执行时间。

我们会发现,原本几乎没有差别的代码,由于增加了变量声明,在性能上会稍微慢上几毫秒,后期随着容器的不断复用,功能上的差距会越来越小,几乎可以忽略不计。

实施计划

对于你的代码,尽量尝试精炼,减少无用的代码,减少下载代码所需的时间。

3. 削减不必要的

除了下载代码之外,还需要下载运行Node环境所需的依赖包。虽然云开发可能对Node进行了缓存,但下载还是有时间差的。这里我也做了一个实验。

函数逻辑几乎一样,都是返回,结果如下

我们发现前三次可能涉及到依赖包的下载,所以前三次的时长对比尤为明显,从第四次开始,两者的时长差别就不大了,可能是因为依赖已经被缓存了,所以直接使用缓存就可以完成函数的执行。

实施计划

你可以选择查看你的.json是否有你不需要的依赖项,将其删除,只保留需要的依赖项,这样可以有效提高你的代码的执行速度。

优化

如果要优化的话,有两个关键点需要优化:

手机到服务器节点的距离和速度

对于前者,一般来说,你可以通过切换不同的网络环境来实现优化,比如从3G切换到4G,从4G升级到5G,这些都可以提高你的手机和服务器节点之间的速度。

另外,你也可以利用内容分发网络 CDN 的能力来缩短你和服务器节点之间的距离。不过对于云函数来说,由于你无法控制,所以我们不再讨论这一点。

补充一下,云开发的文件存储都是有CDN的,所以通过云存储下载的文件会比其他的更快。

后者一般是通过调整代码来实现的,比如只返回必要的资源,不返回不必要的内容,或者以压缩形式返回。

总结

最后我们来回顾一下本文介绍的云函数优化方法:

优化函数下载性能。维护函数容器热启动,提升函数启动性能。减少函数大小,提升代码下载速度。删减不必要的包,减少依赖大小。网络优化。使用更好的网络,如 Wi-Fi。云函数只返回需要的内容,减少下载时间。

以上的方法你都尝试过了吗?还有其他的优化方法吗?欢迎和我分享。

分享