uniCloud 云开发-接入uni-cloud-router

1,696 阅读3分钟

这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战

接入 uni-cloud-router

准备工作

  • 框架 uniapp
  • 模版 uni-starter (官方插件库下载)
  • ide HBuilderX 3.1.22.20210709

什么是 uni-cloud-router

基于 koa 风格的 uniCloud 云函数路由库,同时支持 uniCloud 客户端及 URL 化访问

为什么使用 uni-cloud-router,可以解决下面问题

云函数对应的资源,如果长时间不使用,会被阿里云或腾讯云平台从内存中释放。一旦被释放,启动云函数时会有一个冷启动的过程。

表现为:隔了很久不用,第一次用就会比较慢,然后立即访问第二次,则很快,毫秒级响应。

冷启动的速度一般不会超过1.5秒,如超过1.5秒应该是云函数写的有问题或网络有问题。

资源回收策略方面,阿里云是15分钟内没有第二次访问的云函数,就会被回收。腾讯云是半小时。

两家云厂商仍然在优化这个问题。目前如果开发者在意这个问题,给开发者的建议是:

  1. 使用clientDB可以减少遇到冷启动问题的概率
  2. 非高频访问的云函数,合并到高频云函数中。有的开发者使用纯单页方式编写云函数,即在一个云函数中通过路由处理实现了整个应用的所有后台逻辑。参考插件
  3. 非高频访问的云函数,可以通过定时任务持续运行它(注意腾讯云可以使用这个方式完全避开冷启动,而阿里云的定时任务最短周期大于资源回收周期)
  4. 配置云函数的单实例多并发

具体过程

image.png

    1. 建立一个云函数引用uni-cloud-router 。该云函数名称为hello-uni-colud-router ; 目录结构如下 image.png
  • 其中 index.js 代码为

'use strict';
const {
    Router
} = require('uni-cloud-router')
const router = new Router(require('./config.js'))
exports.main = async (event, context) => {
    return router.serve(event, context)
};

  • 其中 config.js 代码为
// config.js
module.exports = {
  debug: true, // 调试模式时,将返回 stack 错误堆栈
  baseDir: __dirname, // 必选,应用根目录
  middleware: [], // 自定义中间件
}

其中 /controller/hello.js 代码为

const {
	Controller
} = require('uni-cloud-router')
module.exports = class HelloController extends Controller {
	async sayHello() {
		return this.service.hello.sayHello()
	}

}

其中 /service/hello.js 代码为

const {
	Service
} = require('uni-cloud-router')
module.exports = class HelloService extends Service {
	sayHello() {
		return {
			data: '12313132'
		}
	}
}

安装依赖,在hello-uni-cloud 文件夹上面点击右键

image.png 到此为止,云函数部分完成

测试

在前端代码/pages/中任意路由中触发如下代码

image.png

uniCloud.callFunction({
        name: 'hello-uni-cloud-router',
        data: {
                action:'hello/sayHello'
        }
}).then((res)=>{
        console.log(res,'res')
})

访问成功结果如下

image.png

uni-cloud-router Git地址

gitee.com/dcloud/uni-…