微信小程序08 - 底层架构实现,启用运行机制之MINA框架

目录:

  1. 底层架构
  2. 小程序的运行机制

一、底层架构

小程序的开发框架称为MINA框架

微信小程序08 - 底层架构实现,启用运行机制之MINA框架_第1张图片

View:视图层 - 搭建视图的结构和展现样式
App Service:逻辑层 - 处理事务逻辑,数据交互的服务中心

  • Manager:逻辑处理部分的执行
  • API:底层提供的叫WAService.js文件来封装各个api的接口,让各个平台的运行环境能通过API使用微信客户端能力。

小程序只有一个app Service,并且整个生命周期常驻内存的,app Service 的线程加载App Service.

Native:系统层 - 里面接入了微信客户端的原生能力,小程序的视图层和逻辑层是一个双线程的通信,提供了数据传输和事件系统。

视图层和逻辑层通过JSBridge进行通信,逻辑层将数据变化通知到视图层,触发视图层的页面更新,视图层把触发的事件通知给我们逻辑层然后逻辑层进行业务处理。

视图层是怎么将数据变化实时的展示出来呢?

首先WXML具有元素,属性和文本的节点树结构,在节点树种每个节点都有个上下文的关系。所以在渲染WXML的时候,小程序的运行环境,会把WXML的节点树转化成js对象,(可以查下ast抽象语法树的概念),在逻辑层发生数据变更的时候,需要通过app Service提供一个setData方法,把数据从逻辑层传到视图层,webView容器,在渲染节点内容的时候,会把我们传过来的数据,进行一个前后的对比,差异,这个差异通过一个diff算法。然后把差异运用到原来的节点树上,渲染出正确的ui界面。

WXS,WXML,WXSS 一起在UI线程中运行的。我们通常从服务器中请求下来数据会做一个转换,或者做一个filter处理,我们把这些放到ui线程中做,就可以避免跨线程通信的消耗。

小程序的启动运行机制
微信小程序08 - 底层架构实现,启用运行机制之MINA框架_第2张图片

小程序启动通过我们第一次打开会比较长,后续再次打开会比较快。

热启动:用户打开过某个小程序,并且在一定时间内再次打开,不需要再次重新打开小程序,只是后台切换到前台

冷启动:用户第一次打开,或者小程序被微信主动销毁后再次打开,此时小程序需要重新加载启动。

什么时候小程序被微信主动销毁呢?

小程序进入后台后,客户端会帮我们在一定时间内维持小程序的一个状态,超过这个时间, 就会被微信主动销毁。这个时间目前是5分钟

在短时间内2次收到系统告警微信会主动销毁,- 5s

如果第一次打开,后面再打开,这个时候有版本更新,冷启动如果发现有新版本会帮我们异步下载新版本的代码包,并同时使用微信客户端本地的包进行启动,即新版本需要在下次才能打开使用。

二、小程序的运行机制

启动流程图

微信小程序08 - 底层架构实现,启用运行机制之MINA框架_第3张图片
左侧是启动的时候,微信客户端视图层和逻辑层的交互逻辑和数据缓存的存取操作。

在小程序启动的时候会像CDN请求最新的代码包,第一次启动的话,我们需要等到代码包下载完毕,注入到webview容器内,执行后才能看到小程序的页面,所以我们在网络不好的情况,会感觉启动时间会稍微长。

客户端会帮我们把代码包缓存到本地,当我们下次启动的时候,会先从CDN上去请求是否有最新的版本的代码包,这里会有写校验逻辑, 由目前的代码包会运行之前已经缓存好的代码包,同时去异步下载最新的代码包,让我们在下次启动的时候,使用这个最新的。

CDN:内容分发网络,把请求的内容分发到最近的网络节点服务器,提高用户的访问响应速度,以及成功率,解决一些带宽,服务性所带来的延迟问题。

小程序内,我们可以访问第三方服务器,发起一个Ajax request ,服务器会返回一个JSON Data数据

你可能感兴趣的:(微信小程序)