【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

腾讯云是如何助力小程序开发和搭建的?

  • 2019-10-28
  • 本文字数:4315 字

    阅读完需:约 14 分钟

腾讯云是如何助力小程序开发和搭建的?

大家下午好,我今天给大家带来的分享主题是腾讯云小程序解决方案。首先做一个自我介绍,我叫朱展,来自腾讯云,目前负责腾讯云小程序解决方案,从事设计开发的工作。


开始之前做一个现场的调查,多少人有开发小程序的经验,请举手!谢谢!比我想象的多一点,多少人用过小程序的?相信大家都用过。


为什么这么说大家都用过微信小程序呢?2017 年 3 月份到 2017 年的 11 月份的增长趋势比较平稳,有几千万亿的量,2017 年 12 月份出现了暴涨,那个点就是小游戏的发布,也就是跳一跳成为国民游戏的时间,大家都想办法刷榜。在这个热点过后,它的日活没有出现断崖式的下降,还是维持到很高的水准,现在的日活大概就是这个样子。这是我们今天沙龙的背景。



小程序用户规模

小程序的架构

讲我们微信小程序解决方案之前,还是想讲一下小程序本身的架构,我们做移动开发一般有两个模式,第一种是 web 应用,也就是原生应用,还有混合式开发模式这两种模式,它们的特点都是很鲜明的,比如说 web 应用,不需要安装,分享起来很方便,传播性比较好。原生应用一般需要安装,而且安装包的大小不等,几十兆到几百兆都很正常。



移动开发模式


从开发来讲,Web 应用是免安装的,原生应用要安装,需要专业开发,从开发者技能上来说要求比较高。原生应用由于对开发者要求比较高,它能够充分利用我们终端的能力,很大的优点是用户体验会比较好;小程序是结合了两种开发模式的优点,首先是免安装的,一个用户到微信里面打开小程序,用完就走,不用做什么安装的动作。



小程序特点


同时,它的开发模式也是一种类 web 的模式,它的前端和我们的 h5 的前端很相似,用 JS 开发起来的成本会简单很多。用户体验上可以媲美原生应用,后面我们会着重分析一下。最重要的一点,小程序是基于微信这个平台的,它会享有微信带来的便利性,它具备跨平台的开发能力。虽然我们 H5 的应用一般来说也会具备跨平台的能力,但是 H5 是基于开发 web 标准的,有过开发经验的同学知道,我们的业务规范是一个漫长的过程,理想是美好的,现实是骨感的。但是小程序就没有这个问题,微信天生是一个社交的软件,它的传播性和可分享意义非常好。我们可以通过微信的扫一扫打开小程序,可以通过群聊分享一个小程序,比如最近比较火爆的弹一弹小程序,其实它的传播度很高。

小程序基本架构和用户体验


小程序原理


我们看一下小程序底层的东西和它的用户体验,这个图是小程序的基本架构图,它的上层分两块,一层是是视图层,也是 webviews,另一块是线程,逻辑层,也就是 appService,这两层在两个不同的线程里面处理,跟传统的 web 有根本的不同。传统的 web 渲染的时候,如果逻辑里面有很复杂的处理,往往会导致界面出现卡顿的现象。小程序没有这个问题,如果没有调用一些渲染的东西,不会导致你的界面的流畅度下降。由于它们在不同的线程里跑,这两层不能进行直接的交互,必须通过一些手段,比如有一个中间层去交互,它的基本功能是连接 JS 的运行环境和底层的系统,系统能力可以实现 JS 和原生能力的互相调用,两面的两层互相通信,用户触发某事件以后就会响应 Serverless,如果想去更新界面的某一个内容,微信的 api 通过调用形式展现出来。



小程序原理


这张图是介绍小程序渲染的一个图,编译打包的阶段,我们编写小程序的时候会写一个类 WXML 的东西,包含一个 WCC 的编译工具,用户在运行这个小程序的时候,会和你的逻辑层传入的数据做一个编译,渲染成最终的界面,这就是最简单的一个局部更新的过程。



小程序加载


这是小程序加载的几种简单的示意图,小程序在手机加载的时候,要在 CDN 上面拉一个小程序的包,小程序在手机架构的时候可能有一个等待的时间,当这次安装包缓存到本地以后,下次再打开时候直接从缓存里面读取安装包的内容,如果有新的版本,小程序也不会等新版本更新完了再打开 APP,而是直接用上一层缓存的小程序,等你再启动的时候,使用新的安装包替换旧的。

冷加载和热加载的区别

热加载是小程序推出之后,我们在系统层面实现的东西,小程序跑的线程是在后台运行的,没有被销毁的,这个时间大概是 5 分钟左右。在这个时间内,你访问小程序的时候,直接从后台迁到前台,成本相对比较低。



webview 预加载


小程序还提供了一个 Webview 预加载的性能,除了当前看到的 Webview 的视图以外,在后台还可以看到一个新的 Webview,你切换的时候,因为 Webview 的初始化时间比较费性能的,在小程序这个级别,如果想达到比较顺滑的体验,需要做一些预处理。

小程序开发者在服务端会面临的问题

除了保障小程序的流畅性以外,小程序还提供一些原生的组件,有过 H5 开发经验的都知道,有时候写比较长的列表和 H5 应用,和一些原生应用的对比很明显,H5 的表滑动的时候,特别是对一些老的安卓系统感觉很明显。既然体验达不到我的要求,就用原生组件代替 Web 组件。



小程序优势


小程序为什么这么快?刚才提到了安装包缓存,分包加载。小程序解决方案进化历程,小程序是客户端的一种新的创新,我猜小程序的开发者多半是 web 前端,或者是终端开发人员,他们可能对小程序的服务端有些欠缺。



常见问题


我们总结了一下,小程序开发者在服务端会面临一些问题,比如说要处理很多非业务性的逻辑。举个例子来说,若处理一个用户登陆,在小程序这里要考虑会话怎么保存?你和客户端的协议怎么样?你还要了解服务器的应用知识,你的服务器怎么配,你的服务器怎么扩容,我的小程序爆款怎么办?对于一些有开发经验的开发者来说不是问题,对于更多的客户端的开发同学,这些都是很棘手的问题,对整个体系要了解。就拿登录举个例子,下面这张图是微信官方提供的登陆流程图,这个图看起来有点复杂,如果细致了解就知道它要做什么,有没有更好的办法呢?这个图上的一些难点在这儿,微信登陆的时候,小程序发起的时候到服务器端,怎么做会话的协议?服务器端怎么存?微信提供了一个 APP 存在哪儿?还有用户需要保存的,你如果存就会带来安全问题,用微信推荐的方案,你自己都要去处理。



小程序登录流程


第二个场景是 Websocket 信道服务,开发成本高;稳定性难保证;各种异常情况需要考虑,与业务耦合高。

Wafer 解决方案

针对这些情况,我们在 2016 年的时候推出来了一个叫 Wafer 的解决方案,拿刚才的会话场景来说,我们叫 wafer 的会话服务器,封装复杂逻辑,兼顾安全性和便利性,只关注我们提供的几个接口就行了。我们这个会话服务器,也是支持独立的,可以方便地做一个横向的扩展。



wafer 解决方案


针对刚才提到的 Websocket,提出一个信道服务器,它是一个 paas 级的应用,给每个开发者提供唯一的访问地址,供开发者在程序里面使用,小程序和信用服务器,获取 websocket,然后是到业务服务器。



信道服务


总结起来有这几点:配合 SDK 无需开发,直接使用;平台提供稳定性和性能保障;自动实现断线重连;独立信用服务器,消息搬运工。

Wafer 架构


这是当时 wafer 提的一个架构图,因为我们 wafer1 当时提出来,是针对企业客户的,比较看中安全性的扩展性,在这方面做了很多的工作,我们把信道服务器单独提出来,这个方案现在看起来有点问题,特别是在微信开放,当小程序开发个人注册之后,它的问题就浮现出来了,比如说架构太不专业了,每一个节点都需要负载均衡,证书也需要自己处理。wafer 的服务器需要各个开发者自己去管理,代码需要自己去部署。



wafer1


针对 wafer1 不足之处,我们在 2017 年上半年提出 wafer2 的解决方案,它是 wafer1 的简化版,把 wafer1 做了一些简化合并,兼顾的安全性和便利性,比如说它把会话服务器和业务服务器做了合并;在 wafer1 时代我们会让用户自行部署他的服务器,现在在这儿我们进行托管式的管理,用户可以购买自己的服务器,但是不需要做服务器端的配置,还会自动免费部署 SSL 证书,我们和微信做一个深度的合作,把 wafer2 的解决方案提进微信开发者空间里去。



迭代


这个图是微信开发者工具的界面,右上方有腾讯云的一些功能和有一些解决方案,比如说上传代码到开发环境,使用 devtools 启动单步调试等。



wafer2


针对开发环境我们免费提供免费的域名,一键分配运行环境,通过一系列的绑定和关联之后免费搭起小程序基本的框架。


系统支持针对 Node.js 远程调试,试工具集成,支持设置断点,查看变量值,它的功能很强大,用过的人都说好。


我们也把腾讯云的一些特点和亮点,以及比较有特色的能力,通过 API 的形式暴露给小程序开发者,通过一个接口完成身份证识别的功能和图片 OCR 的识别功能。


智能语音我们通过 API 的形式暴露给开发者,你只需要调一个接口,就可以完成语音转文字的功能。

操作过程

现在介绍一下操作过程,我们使用 wafer2 把腾讯云帐号和小程序的帐号做一个关联,创建一个小程序的号码,有客户代码和服务器代码。客户端代码和服务器代码的地址,小程序编译的时候就知道上传到云服务器上,这些都是界面的功能,上传以后还是支持安装包,以及安装后重启的功能。



绑定腾讯云账户


刚才提到了免费分配域名,需要在客户端配置域名以后快速的搭建小程序的前后台,按照这个流程来,整个过程大概 10 分钟左右。我们也提供了多种 demo,供大家了解腾讯云的使用方法,用到上传服务器和上传图片的功能。



创建小程序



上传测试代码


介绍完 wafer2 之后,我们就在想,我们还能够做一些什么?因为 wafer2 为开发者封装了很多功能,比如说我们的登陆,还有信道服务器,还需要开发者自己部署服务,虽然我们做了一些托管,但是你还要考虑服务器的扩能,或者是负载均衡,我们在想登陆不用自己的服务器就可以登陆,而且直接托管到我们的云端,能不能不用自己写服务器的运行环境,直接放在我们的云函数上面。这也是我们后面一段时间的研究方向。

Q/A

Q:刚才有提到信道服务,如果作为企业的话,数据放在私有云里面,是不是理解所有的信道服务都放在腾讯云上面?


A:对的,但是您的数据我们不会存储的。


Q:刚才 wafer2 有一个服务器存在的,可以登陆吗?


A:不可以,自己部署服务器有很多环境的问题。


Q:Node.js 和 PXP 在网上也炒作很厉害,能不能在各个方面做一个比较吗?最后给一个建议,到底哪个比较好一些?或者 Node.js 有没有坑?


A:对于我来说,这两种语言,我自己是没有偏好的,我会看开发者的偏好,但是从能力上来说,其实我们在微信开发小程序里面,提供了 js 的功能,这个问题没有办法正面回答你。


Q:如果这两种方案,Node.js 和 pxp 哪一种比较好?


A:Node.js 它是一个比较新的技术架构,Pxp 是偏向传统的,要根据你的业务场景做分析。


作者介绍:


朱展,腾讯云高级工程师,多年前后端开发经验。目前负责腾讯云小程序解决方案的演进,规划和开发。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/e1AB7tP6uRVIEZ2z5GOAPw


2019-10-28 12:11886

评论

发布
暂无评论
发现更多内容

WritingGPT: 基于ChatGPT和AutoGPT打造个人写作团队

俞凡

人工智能

Vue3 修改项目名称及相关信息

Andy

PoseiSwap 参赛,参与斯坦福、Nautilus等联合主办的 Hackathon 活动

西柚子

Go 语言 map 如何顺序读取?

AlwaysBeta

Go 面试 map

这个线上BUG,让你彻底搞懂了MySQL的字符集,别问我咋知道的

Java你猿哥

Java MySQL ssm 字符串 字符集

未来边缘计算:趋于分布式智能

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

神册!出自阿里P8的深入理解Java虚拟机最新版,让我涨薪60%

Java你猿哥

Java JVM 虚拟机 并发 代码优化

美团T9大牛总结的神仙微服务架构设计模式PDF

做梦都在改BUG

Java 架构 微服务

解决缓存与数据库数据不一致的问题,这篇文章告诉你如何做!

做梦都在改BUG

Java 数据库 缓存 一致性

一张图感受真实的 TCP 状态转移

九零后程序员

TCP 网络 Linux Kenel ebpf

世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面

Java你猿哥

Java 领域驱动设计 DDD crud 领域驱动

公司来了一个腾讯做优化的大佬,三下五除二让我程序快了200%

做梦都在改BUG

Java 性能优化 JVM 性能调优

京东首席系统架构师教你如何搭建高可用高并发系统架构

做梦都在改BUG

Java 高可用 系统架构 高并发

Java 修改项目名称及其相关信息

Andy

关于斐波那契数列的笔记

贝湖光

SpringBoot 整合 MyBatis 组合 Redis 作为数据源缓存

Java你猿哥

Java redis Spring Boot mybatis ssm

RoCE多网卡时,报文可以过去,但是回不来

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

面试官:SpringBoot可以同时处理多少请求?

做梦都在改BUG

Java spring Spring Boot 框架

线程是如何通讯的?

Java你猿哥

Java 线程 多线程 ssm 通讯

AIGC背后的技术分析 | 机器学习背后的微分入门

TiAmo

机器学习 AIGC

不止缓存!Redis这16种妙用你可能没见识过……

Java你猿哥

redis 缓存 分布式 消息队列 全局唯一ID

Github星标88.8k,阿里新产的Spring Cloud进阶小册!面面俱到

Java你猿哥

Java 架构 微服务 微服务架构 Spring Cloud

Nautilus Chain上线主网,为DeFi和流支付的未来构建基础

BlockChain先知

Go 语言 map 是并发安全的吗?

AlwaysBeta

Go 面试 map

PoseiSwap  参赛,参与斯坦福、Nautilus等联合主办的 Hackathon 活动

鳄鱼视界

腾讯T8架构师基于SpringBoot2.x搭建分布式架构

做梦都在改BUG

Java spring Spring Boot 框架

分布式事务的21种武器 - 6

俞凡

架构 云原生

mac端摄影师青睐软件:ON1 Photo RAW 2023.5 中文激活版

真大的脸盆

Mac Mac 软件 图像编辑 编辑图像 照片编辑

火爆Github的1000道Java面试题:无死角打击所有Java面试问题,按这个学,找工作完全没问题!

架构师之道

Java 编程

线程的生命周期和常用方法

Java你猿哥

源码 jdk 线程 多线程 Monitor

首页推荐!阿里大佬带你一周刷完Java面试题1700页,offer拿到手软

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

腾讯云是如何助力小程序开发和搭建的?_文化 & 方法_朱展_InfoQ精选文章