一、前端发展
在开始讲解小程序云开发之前,我们先来看一下前端的发展图。
那么接下来前端3.0,又是什么时代?
目前有两种声音:
- 前后端包揽的“大前端”,也就是
全栈
,关键性技术是Node.js; - 以React-Native、Flutter、uniapp为突破点的“泛前端”,即
全端
。
但是以目前来看,不管以RN,还是Flutter来看,都未必是成熟,全端任重而道远。
相对来说,前端下一步发展为全栈的可能性更高。
基于这个前提下,serverless便是成就此道的革命性技术。
二、核心 Serverless
目前业内对于Serverless的普遍认知是 FaaS + BaaS的综合体
那么FaaS、laaS、PaaS、SaaS又是什么呢?
2.1、各种aas区别
customer 客户 vender 提供商
- IaaS(Infrastructure as a Service)设施即服务
- PaaS(Platform as a Service)平台即服务
- FaaS(Function as a service)函数即服务
- BaaS(Backend as a service)后端即服务
- SaaS(Software as a service)软件即服务
2.2、概念模型
腾讯云的相关团队将Serverless的具体实现为下图所示的模型。
以此为支撑,落地到具体应用场景中的云开发模式如下图:
2.3、优缺点
优点 | 缺点 |
---|---|
构建和部署更简单 | 复杂逻辑不好实现(无状态管理) |
提升开发效率 | 测试不好排查(多函数,分散、无调试工具) |
降低运维需求和成本 | 冷启动慢&高延迟(高度分布式、低耦合) |
2.4、应用场景
Serverless 架构自提出到现在经过若干年的发展,已经在很多领域中有着非常多的最佳实践。
总结出一些 Serverless 架构所适合的场景。
- 实时文件处理
- 实时数据处理
- 机器学习(AI推理预测)
- Web 应用/移动应用后端
- 音视频转码
2.5、总结
- Serverless作为新兴的服务,还处在发展阶段,有明显的优势,但同时也存在一定的问题
- Serverless主要优势为轻量级的聚合能力(模式聚合&数据聚合)、操作便捷的扩展能力,可以很好地应用于数据服务化、AI等场景
三、云开发能力
3.1、数据库
云开发提供了一个 JSON 数据库,可视化管理,可以在云开发控制台打开。
数据库 API :
// 云端初始化
wx.cloud.init({
// 如不填则使用默认环境(第一个创建的环境)
// env: 'cloud1-123456',
traceUser: true
})
// 数据库初始化
const db = wx.cloud.database()
// 增
db.collection('todos').add({
data: {
description: "learn cloud database",
due: new Date("2018-09-01"),
done: false
},
success: function(res) {
// res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
console.log(res)
}
})
// 删
db.collection('todos').doc(_id).remove({
success: function(res) {
console.log(res.data)
}
})
// 改
db.collection('todos').doc(_id).update({
data: {
// 表示将 done 字段置为 true
done: true
},
success: function(res) {
console.log(res.data)
}
})
// 查
db.collection('todos').where({
_openid: 'user-open-id',
done: false
})
.get({
success: function(res) {
// res.data 是包含以上定义的两条记录的数组
console.log(res.data)
}
})
具体的请看:数据库 | 微信开发文档
3.2、存储
云开发也提供了一块存储空间。
在小程序端可以分别调用 wx.cloud.uploadFile 和 wx.cloud.downloadFile 完成上传和下载云文件操作。
// 让用户选择一张图片
wx.chooseImage({
success: chooseResult => {
// 将图片上传至云存储空间
wx.cloud.uploadFile({
// 指定上传到的云路径
cloudPath: 'my-photo.png',
// 指定要上传的文件的小程序临时文件路径
filePath: chooseResult.tempFilePaths[0],
// 成功回调
success: res => {
console.log('上传成功', res)
},
})
},
})
3.3、云函数
云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。
云函数就是运行在云端的方法函数代码(接口/服务)
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
exports.main = async (event, context) => {
// let { id, nickName } = event 传参
// 这里获取到的 openId 和 appId 是可信的
let { OPENID, APPID } = cloud.getWXContext()
return new Promise((resolve, reject) => {
db.collection('userList').where({
_openid: OPENID
}).get().then(res => {
resolve(res)
}).catch(err=>{
reject(err)
})
})
}
在开发者工具中上传部署云函数后,我们在小程序中可以这么调用:
wx.cloud.callFunction({
name: 'getUserInfo',
// data: {
// id: '',
// nickName: ''
// }
success: res => {
this.setData({
userInfo: res.result.data[0] || {}
})
}
})
// 当然 promise 方式也是支持的
wx.cloud.callFunction({
name: 'getUserInfo',
}).then(res=>{
this.setData({
userInfo: res.result.data[0] || {}
})
})
云函数的请求参数 data 有大小限制(100K)
3.4、云调用
云调用是云开发提供的基于云函数使用小程序开放接口的能力,支持在云函数调用服务端开放接口,如发送模板消息、获取小程序码等操作都可以在云函数中完成。
具体的可以参考,云调用 | 微信开放文档 (qq.com)