云原生微信小程序的开发笔记--原理提升篇
哼哼,云开发是不可能开发的,真香!
此次课程建议有一定小程序开发经验的同学 进行除代码以外更多的产品向的思考(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 揭秘腾讯云研发团队实战锦囊
当然你也可以选择和我一样做一个终身学习者,点击链接一杯奶茶开通全部课程,加油互联网人