云原生微信小程序的开发笔记--原理提升篇

哼哼,云开发是不可能开发的,真香!

此次课程建议有一定小程序开发经验的同学 进行除代码以外更多的产品向的思考(1/2)

 

架构层  双线程模型 底层 更加安全高效 不允许直接操作DOM

链路层  授权模型 前后端 登陆

应用层  自定义组件

 

客户端 -发起者,获取code -终结者,储存token

服务器-处理网络请求

借口服务-验证合法性

 

code临时、appid唯一、appsecret密钥不可见、openid唯一、session_key数据加密、token保存状态

unionld&appid=openid

 

组件化 UI抽离 易于复用,维护,重构  要理解背后的规范和思维

自定义组件:component〈page〈App

wxml 组件结构、wxss组件样式、js组件行为、jason声明配置

自定义元素必须define后(即注册)才能使用

 

生命周期created、ready、error是小程序的特色

通信 事件驱动 event触发、properties传递

 

提升性能 调试器-ide Audits页面

避免过大WXML节点、过长脚本耗时、过长首屏时间、过长渲染耗时、过大setdata、过多图片请求etc

 

Webpack提高研发效率

自动化测试提高交付质量   前后端单元测试(面向组件)》集成测试(面向功能或页面,渲染、交互、传参、共享)〉端到端测试(面向整体)》验收测试。

微信特有automator工具

 

数据监控 数据之外多思考产品

数据:统计与分析

数据建模:性能(启动+运行)、用户(画像+行为)、异常(代码+服务+行为) 三个加起来就是页面,页面再往上就是运行环境

异常数据采集需要前序页面数据

传统埋点可以考虑用ES6的Proxy和Reflect作为代理(劫持),封装为js然后运用require(‘。/路径。js’),加入白名单

 

CI/CD工程交付体系 持续集成和持续交付

持续交付 精益原则LSD

持续交付 需要持续集成的底层支持

 

部署流水线 持续集成》自动化测试〉部署》发布

部署工具:miniprogram-ci

 

效率  传统:程序端方API数据,服务端放私密数据       云调用:免鉴权调用开口,集成生态 云函数:免服务器

留存  订阅消息(被动/主动) 一次性or长期

    传统:获取用户授权 wx.requestSubscribeMessage>授权模版ID列表》同步服务器〉解析出openid》保存到数据库

        access_token             SubscribeMessage.send发送订阅消息,一次一条,需要触发         服务器发给指定openid

    云调用:openapi.subscribeMessage.send

体验  数据预取,合理缓存 数据预加载(周期性跟新、数据预拉取)冷热启动

    周期性更新-应对弱网 

    数据预拉取-应对冷启动

更新  渐进增强

    前端:未启动时最慢24小时、冷启动时需要两次以后。 注意没有用过的是无状态的而不是未启动

    后端:灰度发布(按比例或ID)

 

云开发  后端服务   数据、云函数、云储存

文档型数据库 反范式化设计(内嵌)减少文档查询次数 记录不变 最终数据一致即可 数据小幅增加 需要二次查询时 快速查询

                   范式化设计(引用)降低更新成本   记录经常变 中间数据必须一致 数据大幅增加 数据不包含在结果 快速增删改

关系型数据库 定义好表的模板结构 需要对结构内容做声明描述(云开发不必)

预填充数据 没有预设需要用doc对文档记录级别的更新,有点话直接_.set()

安全规则 身份认证auth和doc

提高数据库性能 合理使用索引,结合情况创建组合索引、尽可能通过条件和limit限制数据、限制返回字段等数据量、查询量大不用正则、尽可能用set、别用太多的数据排序、一次去处业务所需、使用短字段名、不把数据库请求放在循环体里面(一次性查完,然后处理,再一次性写回)、少用count建立冗余字段来记录它们、虚假删除(加一个delete字段,默认false,执行删除时改为true,查询时只查false的)

 

KISS keep it simple stupid

设计简单易用云开发函数 云函数使用事件触发模型,每次调用即触发一次,以实例运行(与其他云函数时独立执行)彼此无法互相获取信息,只能通过统一的存储空间

用户发请求到云开发后台》云开发分发到worker/容器〉容器创建环境,下载代码》执行代码〉返回结果

冷启动耗时长(不存在/刚启动/长时间) 温启动中等(一段时间未启动/更新了代码) 热启动最短(一直活跃)————最好一直保持热启动

预热云函数使其热启动,借助定时触发器,定期唤醒容器

缩小云函数文件大小,尽量避免无意义荣誉代码,去掉注释,压缩函数体积

削减不需要的package,保留必要的依赖,尽可能选够用体积小的依赖

一个函数解决一个关键问题,将重复代码转化为子函数

减少分支数量,简单的逻辑,尽量同步触发启动相关流程,没有前后关系可以用promise.all发送请求

 

内容加速 云储存无缝上云

非结构化数据(图片视频等等)是用块状的文件存储    文件存储只能更改整体,数据库可以处理细微

CDN加速 主储存文件复制给各地的节点 缓存时间  CDN回源流量

安全 云存储权限管控 读写   可以灵活,利用安全规则中的auth.uid和auth.loginType做访问控制(登陆以后才能做的事情)

 减少存储空间 在参数中设置分辨率等等 用云开发的扩展——图像盲水印、图像编辑

 

日志监控 阶段性结果 前后端日志 云开发的属于后端

     原有日志打印/SDK封装日志打印(推荐后者wx-server-sdk)

       云开发控制器-高级日志 检索   

合理设置日志 外部交互(请求输入参数、返回数据) try-catch异常捕获

      严重级别 log info warn erro 标记  

      信息分开记录,不以一行字符串

 

持续在线  云托管 吧整装的后端服务打包,放在云托管中运行,提供服务

      形成代码包(任何语言编码)》定义代码包如何被启动做正确运行,以及运行时需要的条件,写到清单里面〉在云托管中创建一个服务,并创建一个版本,将代码包含清单打包上传》云托管运行一个容器实例,将仓库打印好的包放进去,启动运行。   概括为:编码开发程序,创建dockerfile文件或者配置cloudbase framework,云托管构建对象,创建实例运行

灰度上线时可以部分流量到版本2中去,比如60%到原版本,40%流到版本2

 

业务告警  业务出现异常值触发告警机制

告警对象:云函数、数据库、云储存、云托管

云函数触发条件:运行时间、错误次数、资源用调用次数、外网出流量、并发执行次数、执行超市次数、内存超限次数

数据库~:请求数 读请求叔 写请求数

云存储~:无法针对某一文件细致设置 上传操作 下载操作 CDN回源流量 上传流量

云托管~:服务(模块稳定) 版本(版本稳定) CPU使用率 内存使用率 pod实例个数、状态不正常数、实例数量百分比 调用次数

告警渠道:接收对象 有效时段 接受渠道

 

 

 

CONTINUE

下期带来关于云开发的实战策略---全方面快速云开发一个微信小程序

关注我不错过最新推送呀哟~~~

########

 

 

我课程学习的链接挂在下面了(恰饭时间doge哈哈哈)

最大的投资应该是投资自己,欢迎大家和我多多交流!

风雨兼程,前程可期!

https://t3.lagounews.com/3R6CRvR7cD55D 揭秘腾讯云研发团队实战锦囊

当然你也可以选择和我一样做一个终身学习者,点击链接一杯奶茶开通全部课程,加油互联网人

 

posted @ 2021-03-29 18:22  星涅爱别离  阅读(266)  评论(0编辑  收藏  举报