微信小程序架构原理基础详解
本篇文章给大家带来了关于微信小程序的相关问题,其中主要介绍了关于基础架构原理的相关内容,其中包括了宿主环境、执行环境、小程序整体架构、运行机制、更新机制、数据通信机制等等内容,下面一起来看一下,希望对大家有帮助。
【相关学习推荐:小程序学习教程】
下图为微信小程序的整体架构图:
发展由来
我们先来简单讲讲微信小程序的发展历,知己知彼方能百战不殆。微信小程序简称小程序。张小龙于2017年01月09日在微信公开课上宣布其正式上线。小程序英文名为 Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
小程序上线以来,一直被称为便携版的 APP,关于两者之间的区别,无外乎是小程序相对轻便、开发成本低、开发周期短、收效快。
小程序并非凭空冒出来的一个概念,当微信中的 WebView 逐渐成为移动 Web 的一个重要入口时,微信就有相关的 JS API 了。
WebView 是移动端(手机、IPad)提供的运行 JavaScript 的环境,是系统渲染 Web 网页的一个控件,可与页面 JavaScript 交互,实现 APP 与 Web 的混合开发,WebView 渲染 Web 页面需要强大的渲染内核支持,这其中 Android 与 IOS 系统的内核又有所不一样。
根据了解,小程序诞生的背景主要推动力是由于移动网页在微信内传播体验不良,能力不强,当然我觉得这其中也有原生 APP 缺点原因的推动,比如每次都要从 App Store 或者其他应用市场下载,即使下载了,也占据系统很大的空间,如果不经常用,被用户删掉的可能性也非常大。
我们先抛开原生APP的问题不谈,对于移动网页在微信内传播体验不良,能力不强的问题,即使后来微信团队推出了 JS-SDK 来解决移动网页能力不足的问题,但 JS-SDK 的模式并没有解决使用移动网页遇到的体验不良的问题,这其中的原因大概能概括为这三个点:白屏问题、页面切换的生硬和点击的迟滞感。
为了解决这些问题,微信团队面临的问题是如何设计一个比较好的系统,使得所有开发者在微信中都能获得比较好的体验。这个问题是之前的 JS-SDK 所处理不了的,需要一个全新的系统来完成,它需要使得所有的开发者都能做到:
快速的加载。
更强大的能力。
原生的体验。
易用且安全的微信数据开放。
高效和简单的开发。
这就是小程序的由来。文档
宿主环境
微信小程序的宿主环境为微信客户端,它是依赖于微信客户端上运行的,并且跟小程序 基础库 版本有重大关联关系。
我们可以把 微信客户端 以及 小程序基础库 简称为微信小程序的宿主环境。
微信小程序可以调用宿主环境提供的微信客户端的能力,可以完成许多普通网页无法完成的功能,这就使得小程序比普通网页拥有更多的能力。小程序会运行在不同版本(不同的微信客户端+不同基础库)的宿主环境下,因此针对各个版本的宿主环境做程序上的兼容也是在所难免的。
执行环境
小程序的主要开发语言是 Javascript,它与传统网页开发具有相似性但还是有一定区别:
网页开发,渲染线程和脚本是互斥的,这也是为什么长时间的脚本运行可能会导致页面失去响应的原因,本质就是我们常说的 JS 是单线程的。
小程序,视图层和逻辑层是分开的,双线程同时运行,视图层的界面使用 WebView 进行渲染,逻辑层运行在 JSCore 中。
网页开发,主要面对各厂商的浏览器,在移动端还需要面对 Safari、Chrome 以及 iOS、Android 系统中的各式 WebView。
小程序,主要面对两大操作系统IOS和Android的微信客户端,还有开发工具、PC端(window)、Mac。开发时候需要注意的是微信客户端的版本号和小程序API 支持的基础库版本号。
微信小程序运行在多种平台上:iOS(iPhone/iPad)微信客户端、Android 微信客户端、PC 微信客户端、Mac 微信客户端和用于调试的微信开发者工具。
各平台脚本执行环境以及用于渲染非原生组件的环境是各不相同的,具体区别如下:
小程序整体架构
通过上面的内容,你应该大致了解小程序诞生的情况和所处的环境了,下面我们就来聊聊小程序的整体设计构架情况。
整个小程序系统构架分成两个部分:视图层(WebView) 和 逻辑层(App Service),这两个部分分别由两个独立线程管理。
视图层:也称为渲染层,渲染层用来渲染页面结构,主要由 WebView 进行渲染,一个小程序可以存在多个界面,所以渲染层可能存在多个 WebView 线程。
逻辑层:逻辑层采用 JSCore 线程运行 JS 脚本。逻辑层主要用来逻辑处理、数据请求、接口调用等。
视图层和逻辑层之间的沟通则需要借助 系统层(WeixinJsBridage) 进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层把触发的事件通知到逻辑层进行业务逻辑处理。
页面渲染大致过程为:我们把项目进行编译会把 WXML 转化成对应的 JS 对象(Virtual DOM),在逻辑层发生数据变化的时候,我们会通过 setData() 方法把数据从逻辑层传递到视图层,视图层在接收到数据后,会内部进行差异对比,把差异应用在原来的 Dom 树上,再正确的渲染出 UI 界面,完成页面的渲染过程。
通过上面的分析,你是否能理解开头放置的架构图了
上面的分析还提及到了一个 系统层(WeixinJsBridage),一般简称为 JSBridge,它起到了一个中间桥梁的作用,非常重要。它不仅让视图层与逻辑层两个单独线程能进行通信,而且也架起上层开发与系统底层功能(Native)的桥梁,使得小程序可以通过调用 API 使用原生功能,且部分组件用原生组件实现,从而有良好体验。
逻辑层还有一个重要的操作,发送网络请求,它也是经由 系统层 转发的。
讲到这里,希望你对小程序的整体架构有一定认识了,下面我们开始就讲一下小程序内部的一些机制情况了。
运行机制
小程序启动运行两种情况:
冷启动(重新开始):用户首次打开或者小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动,即为冷启动。
热启动:用户已经打开过小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需要将后台态的小程序切换到前台,这个过程就是热启动。
需要注意:
1.小程序没有重启的概念。
2.当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后会被微信主动销毁。
3.短时间内收到系统两次以上内存警告,也会对小程序进行销毁,这也就为什么一旦页面内存溢出,页面会奔溃的本质原因了。
更新机制
小程序 冷启动 时如果发现有新版本,将会异步下载新版本的包,并同时会先用客户端本地的旧包进行启动,等下次冷启动才会应用上。如果需要马上应用最新版本,可以用 wx.getUpdateManager API 进行处理。
const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { // 请求完新版本信息的回调 console.log(res.hasUpdate) }) updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content: '新版本已经准备好,是否重启应用?', success(res) { if (res.confirm) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate() } } }) }) updateManager.onUpdateFailed(function () { // 新版本下载失败 })
- 淘宝刷信誉平台靠谱吗?安全度如···
- 详解Laravel的安装目录结···
- 高效工作新方式扩写软件让写作更···
- SEO优化服务:提升网站排名与···
- 如何使用Composer管理P···
- 文本AI生成:智能写作的未来已···
- 了解角度信号:综合指南
- VPS建站顺序如何规划?关键步···
- 百资电池大师,免费升级必备!
- laravel怎么查询绝对路径···
- 如何挑选靠谱的网站买卖平台?
- “新速排,高效上位快”
- 专业的SEO优化企业-让您的网···
- Vue 父组件向子组件传递 m···
- 提升网站竞争力,选择最适合的在···
- 如何把微信分销系统的营销力度发···
- 飘仙建站:轻松打造个性化网站的···
- “百万邮件采集,高效营销利器诞···
- 建站宝盒是否存在隐性收费项目?···
- 域名过期或被劫持:网站服务器无···
- 文本AI生成的无限可能:效率与···
- 起名周易八字如何做推广,起名周···
- 恩施SEO,关键词优化,地域策···
- 湖南网站建设如何兼顾优化与用户···
- 网站优化,双管齐下,曝光转化翻···
- 网站互点:提升网站流量的秘密武···
- 搜狗联盟,广告共赢!
- 专业做网站SEO公司:如何选择···
- 天降福利?揭露最新网络刷单骗局···
- 如何在资深SEO面试中脱颖而出···
- 如何在 ReactJS 中创建···
- 全面提升写作效率-作文投稿软件···
- 高质量性价比SEO软文批量生成···
- 探索苹果软件开发新境界:创新与···
- 装饰网站建设如何兼顾美观与实用···
- 优化网站结构,提升SEO效果:···
- 百度权重飙升秘籍
- 企业网络营销的方式有哪些?
- 如何在vscode工作区中添加···
- 专业SEO服务费用分析:如何选···
- 如何重构Composer源管理···
- SEO新手新站优化,常见问题速···
- 西部数码建站助手视频教程:零基···
- 网站运营新概念五网站维护
- AI免费写作助手:让写作更高效···
- 创建网站所需条件,全方位解析网···
- 打造爆款推广方案,一招制胜!
- SEO摩天梯
- 济南域名注册建站公司哪家值得推···
- 一元云购H5自助建站能否自定义···