浅谈我对微信小程序云开发的认识与见解
一、微信小程序云开发的优点1.无需自建服务器2.项目快速上线3.轻轻松松获取用户凭证二、微信小程序云开发的坑1.基础版CDN流量太少2.云数据库限制多(1)小程序端读取限制(2)云数据库读写权限限制3.对外开放限制多三、我对小程序云开发总结对于微信小程序云开发,我也算是入门吧,跳了很多坑,但也都从坑里爬了出来。通过写下这篇博客来总结一下我对小程序云开发的认识。所有外部依据均来自小程序官方文档微信推
一、微信小程序云开发的优点
1.无需自建服务器
2.项目快速上线
3.轻轻松松获取用户凭证
二、微信小程序云开发的坑
1.基础版CDN流量太少
2.云数据库限制多
(1)小程序端读取限制
(2)云数据库读写权限限制
3.对外开放限制多
三、我对小程序云开发总结
对于微信小程序云开发,我也算是入门吧,跳了很多坑,但也都从坑里爬了出来。通过写下这篇博客来总结一下我对小程序云开发的认识。
所有外部依据均来自小程序官方文档
微信推出小程序云开发的SDK是在2018年8月份,距离今天已经过去一年多了。
看一下微信官方对目前用户的版本统计,目前99.2%(ios)的用户支持使用微信小程序云开发发布的小程序。换句话说,目前小程序云开发发布的小程序 (绝对) 基本 可以被所有用户使用。
说了适配问题之后,我们来看一下到底什么是微信小程序云开发
开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
云开发为开发者提供完整的原生云端支持和微信服务支持,
弱化后端和运维概念,无需搭建服务器,
使用平台提供的 API 进行核心业务开发,
即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
(摘自微信小程序官方文档)
重点看一下我标记的这句话:“同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥”,也就是说你在使用微信小程序云开发的同时,还是可以配合正常的云服务器来使用的。
下面进入正文
一、微信小程序云开发的优点
首先要介绍的当然是小程序云开发的优点啦。
1.无需自建服务器
这一点我相信是绝大多数人,选择使用小程序云开发的原因。不需要自己去搭建服务器,既省去了服务器搭建所耗费的时间,又省去了金钱,小程序云开发为大家提供了一个免费基础版本。
这个配置,如果不上传高质量的图片,音频及视频的话是完全够用的。为什么把这三类除外呢,我会举一个实际的例子来解释一下。 (二、1.)
2.项目快速上线
小程序云开发可以不依托外部的云服务器,来进行数据库的增删改查,以及对象存储。这样就使得项目可以快速上线,大家应该都知道如果使用外部的云服务器来制作接口的话,需要为小程序配置request合法域名,来看一下小程序官方文档对这方面的要求。
首先只支持https协议,国内服务器必须解析域名进行ICP备案后,绑定ssl证书,然后来使用https,到这里也许有人会想到使用国外服务器绕过备案。再往下看,你会发现微信早已想到会有这个可能,强制要求域名必须通过ICP备案。那么就逃脱不了30-40天的备案时间了。
也就是说使用小程序云开发,不需要等待ICP备案的时间,开发完立马就能审核上线。这一点也是我第一次使用小程序云开发时的原因,省去了不少时间。
3.轻轻松松获取用户凭证
openId对于开发者来说就相当于用户的“身份证”,也是用户在本小程序的唯一标识,对于不使用云开发的小程序来说,要想获取用户凭证流程非常复杂,看一下官方流程图
看着流程图就觉得头皮发麻,大致过程是这样的:小程序端先获取用户的一个登录code——将这个code传到自己的后端服务器——在后端服务器访问微信官方接口,将code和一系列密钥传过去——微信官方接口将用户凭证(包含openId)传给后端服务器——后端服务器再传给微信小程序。这是整个获取流程。
如果使用微信小程序云开发的话,那就非常简单了:只需要一个简单的云函数,在小程序端触发这个云函数即可。
//云函数主要代码 login云函数
const cloud = require('wx-server-sdk')
cloud.init({
env: 'xiaodou-jtc8g'//云开发环境ID
})
exports.main = (event, context) => {
console.log(event)
console.log(context)
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
env: wxContext.ENV,
}
}
//小程序端请求代码
wx.cloud.callFunction({
name: 'login',//上面云函数的名字
data: {},
success: res => {
console.log(res)
}
})
只需两部分代码,即可轻松获取到用户凭证,效果如下
二、微信小程序云开发的坑
1.基础版CDN流量太少
在我最近做的一个项目中,仅在开发与测试期间,上传/下载了相册原画质的图片就用了765MB(四五天时间),当时我就意识到了事情的严重性,因为这个项目上线后需要每天为百名用户来使用,如果像我测试的那样,可能CDN流量两天就用完了。一旦CDN流量用完升级配置,一个月最少都要30块钱,这个价钱可以在外面购买一个很好的对象存储服务了。
不过还好我发现这个问题比较早,及时控制了上传图片的质量,每次上传图片程序自动都进行一次压缩,每张大概在200kb以内,在正式使用到现在也就消耗了1mb左右的CDN流量。(日均活跃用户在60人左右)
2.云数据库限制多
这个坑我觉得对于我来说是最深的一个,云数据库的限制有两方面。第一个方面是小程序端获取数据条数限制。第二个方面是云数据库读写权限限制。
(1)小程序端读取限制
小程序端直接请求数据库,每次最多可以读取20条数据
使用云函数请求数据库,再通过小程序端触发云函数,每次最多读取100条数据
要是每次需要请求的数据超过100条,那就需要使用skip分次请求再进行组合了,具体操作可查看官方文档或其他博客。
(2)云数据库读写权限限制
在说这个坑之前先说一下,小程序云数据库为非关系型数据库,不能使用外键内键联合查询。(与上下文无关,本文未提到)
云数据库最开放的权限是:所有用户可读,仅创建者可改。
也就是说你创建了一条记录,他人无法进行修改或删除,这也就导致了一系列的问题。下面举一个我实际项目的例子。
eg:现有一个多座位的自习室供用户预定,用户每次预定可以选择一个使用时间,到这个时间结束后这个座位可以被其他人再次预定。
简单的一个场景,正常的逻辑下我们数据库的自习室表里应该有这三个主要的字段就够了,自习室标识(r_id),自习室到期时间(r_date),自习室是否可预定(r_flag)。
当一个用户选择预定一个自习室时,我只需要判断这个自习室的r_flag是否为true即可,如果为true,用户可以预定,预定成功后r_date刷新,r_flag置为false即可。
但是,小程序云开发提供的云数据库,最开放的权限为所有用户可读,仅创建者可改。 就导致上述逻辑行不通。我们就需要更复杂一点的逻辑来实现这个功能。
我当时的做法是:每次用户预定自习室时都提交一条数据,将每个自习室所有的预定数据按照时间先后放到一个个栈内,最新的预定放到上面,这样下次有人进行预定时,只需要比较是否到最上面那条数据的r_date,来判断该自习室目前是否可被预定。不修改记录实现一个覆盖删除的功能。
3.对外开放限制多
一个正常的小程序项目一般都会配一个后台管理系统,这个后台管理系统与小程序共用一个数据库,来对数据进行管理。由于小程序云开发自带的云数据库在小程序内部,外部要是想访问这个数据库则需要一个稍微复杂的流程:
先使用官方接口获取到调用凭证,在通过这个凭证使用指定的接口来对数据库进行增删改查。此外这个流程中消耗的资源也是算在基础配置里的,每日请求上线5万次。
三、我对小程序云开发总结
介绍完了小程序云开发的优点和坑之后,我觉得小程序云开发的适用人群就非常明确了:如果你没有一个已经备案过的域名和一台云服务器,又想使项目快速上线,且对云存储、云数据库的要求不高,那么小程序云开发非常适合你,0开发成本即可发布一款微信小程序。
如果你的日活用户非常多,又不想花费用升级云开发的配置,那么小程序云开发并不太适合你。
别着急走,如果你的日活用户不是太多,基础版的云函数请求足够用的话,那么你可以使用小程序云开发,来减少一些复杂的流程,再配合自己的外部服务器来开发,效果极佳。如果有机会,再以后的博客里我会介绍一下如何通过云函数配合外部服务器(无需解析域名备案,http协议)来实现数据请求。
总的来说,我觉得小程序云开发带来的利大于弊
更多推荐
所有评论(0)