小程序的双线程模型

小程序的双线程模型

小程序的最终呈现是WebView + 原生组件。

在一般的Web技术中,UI渲染和js的脚本执行是在单线程上执行的,这就容易导致一些逻辑任务抢占UI渲染的资源。

因此小程序的选择了Hybrid的渲染方式。而为了管控性和安全性于是又设计出了双线程。

微信官方给出的双线程模型图:
image

如上图。

小程序的渲染层和逻辑层分为2个线程管理:
渲染层:使用WebView进行渲染
逻辑层:采用JsCode线程运行js脚本

这样设计的原因是,为了防止开发者使用一些浏览器提供的,诸如跳转页面,操作DOM,动态执行脚本的开放性接口。
于是微信小程序通过提供一个沙箱环境来执行开发者们的js代码来解决。这个沙箱环境只提供纯js的解析环境,没有任何浏览器相关接口。

这就是小程序的双线程模型的由来:
逻辑层:创建一个单独的线程去执行js,在这个环境下执行的都是小程序业务相关的逻辑diamagnetic
渲染层:界面的渲染任务全都在渲染层的WebView线程里面进行,通过逻辑代码去控制渲染哪些界面。一个小程序存在多个页面,同时也存在多个WebView线程


双线程的通信

把开发者的js逻辑代码放到单独的线程去运行,但在WebView线程里,开发者就没法直接操作DOM。下面就介绍如何实现动态更改界面

从图中可以知道,逻辑层和渲染层的通信会由Native(微信客户端)做中转,逻辑层发送网络请求也经由Native转发。这说明可以把DOM的更新通过简单的数据通信来实现。

关于虚拟DOM的形成,大概过程:

image

用JS对象模拟DOM树。比较两颗虚拟DOM树的差异。最后把差异应用到真正的DOM树上

在双线程模型上的流程如下图:


image
  1. 在渲染层把WXML转化成对应的JS对象
  2. 在逻辑层发生数据变更的时候,通过宿主环境提供的setData方法把数据从逻辑传递到Native,再转发到渲染层
  3. 对比前后的差异,把差异应用到原来的DOM树上,更新界面

以上,就是通过把WXML转化成数据,通过Native进行转发,来实现逻辑层和渲染层的交互和通信。这个过程基本上都是通过小程序的基础库来完成的

小程序的基础库

小程序的基础库是通过JavaScript编写的。它可以被注入到渲染层和逻辑层运行,主要应用于:

  • 在渲染层,提供各类组件来组建界面的元素
  • 在逻辑层,提供各类API来处理各种逻辑
  • 处理数据绑定,组件系统,事件系统,通信系统等一系列框架逻辑

这个基础库它是提前内置在微信的客户端中的这样做的好处:

  • 降低业务小程序的代码包的大小
  • 可以单独修复基础库中Bug,无需修改到小程序的业务代码

总结

小程序的双线程模型,其实就是把逻辑层和渲染层分开,然后中间用Navite进行衔接。而这个Native的存在是为了提高小程序的监控性和安全性考虑的。


原文: https://www.jianshu.com/p/fb331438e223
参考: http://www.wxapp-union.com/portal.php?mod=view&aid=5647

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353