浅谈我对微信小程序云开发的认识与见解_微信云开发的优点-程序员宅基地

技术标签: 微信小程序  前端  

一、微信小程序云开发的优点
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协议)来实现数据请求。
总的来说,我觉得小程序云开发带来的利大于弊

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39167934/article/details/106073415

智能推荐

利用xgboost进行多元时间序列预测_best_adab=space_eval(space,best)-程序员宅基地

文章浏览阅读9.3k次,点赞7次,收藏76次。利用2019年ccf的数据集进行测试(乘用车销量预测)主要思路进行划分出很多窗口,这里以1320*4条数据为一个窗口因为每个省都有60个车型,一共22个省,就是1320,预测未来4个月,所以用的4import pandas as pdtrain_sales = pd.read_csv('C:\\Train\\train_sales_data.csv',header=0)trai..._best_adab=space_eval(space,best)

thrift windows vs2015编译_windows下vs2015搭建thrift(c++)-程序员宅基地

文章浏览阅读3.6k次。1、首先从官网下载安装包https://thrift.apache.org/download 或者从Git地址中获取:https://github.com/apache/thrift 目前的最新版为thrift-0.9.3 2、解压后用vs2015打开里面的cpp lib 用vs2015打开此路径下的sln文件: thrift-master\lib\cpp 升级一下: ..._windows下vs2015搭建thrift(c++)

SwiftUI实现网格视图(GridView)_swiftui gridview-程序员宅基地

文章浏览阅读1.7k次。目录SwiftUI实现网格视图(GridView)HStack和VStack组合1. 准备工作2. 实现RowView3. 组合成网格4.效果图利用格子位置1. GridLayout2. GridView3. ContentView.swift4. 效果图参考资料SwiftUI实现网格视图(GridView)使用两种方法来实现网格视图,一种是利用HStack和VStack组合来实现,另一种利用格子位置来实现。HStack和VStack组合使用这种方法的步骤:首先实现行视图也就是RowView利_swiftui gridview

SDH、MSTP、OTN和PTN的关系-程序员宅基地

文章浏览阅读318次,点赞7次,收藏9次。SDH系统的电路调度均以TDM为基础,所以看到很多人说SDH业务就是TDM业务,就是传统的电路调度,是有理论依据的。但在SDH大红大紫的时候,另一场战争在以太网和ATM(不是取款机哟,是“异步传输模式”,一种以信元为基础的分组交换和复用技术)之间开打。在这场大战中,以太网取得全面胜利,从而大行其道。TDM,就是时分复用,就是将一个标准时长(1秒)分成若干段小的时间段(8000),每一个小时间段(1/8000=125us)传输一路信号。这样的话,SDH是一个大红人,以太网是另一个大红人,能否合作一下?

使用STM32和AD5420输出4-20mA的电路和程序_stm32输出4-20ma电流-程序员宅基地

文章浏览阅读6.8k次,点赞6次,收藏65次。最近在做一个4-20mA输出的项目,遇到一些问题,但是还好顺利解决,使用STM32F103C8T6和AD5420,下面是电路图:AD5420电路参考datasheet和CN0270,www.analog.com/CN0270.通讯使用的是官方示例程序移植,官方为4-20mA,我这项目为了有其他模式所以改为0-24mA输出。程序如下:头文件如下:#ifndef __..._stm32输出4-20ma电流

“IT小百科”之“Windows自带的服务和系统进程详解”_windows服务 打开exef进程-程序员宅基地

文章浏览阅读855次。网络安全入门学习路线其实入门网络安全要学的东西不算多,也就是网络基础+操作系统+中间件+数据库,四个流程下来就差不多了。1.网络安全法和了解电脑基础其中包括操作系统Windows基础和Linux基础,标记语言HTML基础和代码JS基础,以及网络基础、数据库基础和虚拟机使用等...别被这些看上去很多的东西给吓到了,其实都是很简单的基础知识,同学们看完基本上都能掌握。计算机专业的同学都应该接触了解过,这部分可以直接略过。_windows服务 打开exef进程

随便推点

今天是七夕,来看看程序员的土味情话。_关于程序员的三行情书-程序员宅基地

文章浏览阅读459次。其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。不少人对程序员刻板的印象常常是性格木讷、不善交际、不解风情等,仿佛就如他们整天打交道的机器一般精准而冷漠。今天是七夕,咱就来看看程序员都是怎么表达爱意(说土味情话)的。你爱或者不爱我 爱就在那里 不增不减。用Python 绘制出一颗爱你的心。..._关于程序员的三行情书

jiongjiong.com.cn域名600元被我竞拍到了,嘿嘿-程序员宅基地

文章浏览阅读1.4k次。jiongjiong.com.cn域名600元被我竞拍到了,嘿嘿

HBase删除数据_hbase delete rowkey 无法删除数据-程序员宅基地

文章浏览阅读2.6k次。HBase不会定位到需要删除或更新的记录进行操作。由于HBase底层依赖HDFS,对于HBase删除操作来说,HBase无法在查询到之前的数据并进行修改,只能顺序读写,追加记录。为了更新或删除数据,HBase会插入一条一模一样的新的数据,但是key type会标记成Delete状态,以标记该记录被删除了。在读取的时候如果取到了是Delete,而且时间是最新的,那么这条记录肯定是被删掉了。HFile的存储格式如图所示,每一个单元格或者KeyValue在HFile中的格式如下:row length + r_hbase delete rowkey 无法删除数据

Hive安装配置启动的时候出现的问题以及解决办法_启动hive时加载了很多at-程序员宅基地

文章浏览阅读3.9k次。[ERROR] Terminal initialization failed; falling back to unsupportedjava.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected at jline.TerminalFactory.create(Term..._启动hive时加载了很多at

cause by: java.lang.ClassNotFoundException : com.baomidou.mybatisplus.generator.config.ITypeConvert_caused by: java.lang.classnotfoundexception: com.b-程序员宅基地

文章浏览阅读2.4k次。cause by: java.lang.ClassNotFoundException : com.baomidou.mybatisplus.generator.config.ITypeConvert_caused by: java.lang.classnotfoundexception: com.baomidou.mybatisplus.extens

vue项目中实现用户登录以及token验证_vue jwt 验证登录-程序员宅基地

文章浏览阅读1.6k次。用户登录这个功能在现在越来越普遍,我也就研究了一下,本文主要讲登录这个功能中token的验证功能,本例使用的是vue框架,如何实现用户登录功能的token验证,以及整个的逻辑关系,也会将涉及到的其他知识点都讲清楚,让大家更容易更透彻的了解这个功能。废话不多说,看正文!总体就是这样,接下来细说每个部分涉及的知识点和代码。 用于生成token和token的解析验证 1.JWT的组成: 一个JWT实际上就是一个字符串,它由三部分组成:头部(Header)、载荷(Payload)与签名(sign_vue jwt 验证登录

推荐文章

热门文章

相关标签