找回密码
 立即注册

微信小程序双线程模型

匿名  发表于 2022-12-8 19:49:49 阅读模式 打印 上一主题 下一主题
在说小法式的双线程模子之前,先简单先容一下进程和线程
进程和线程

进程是对运转时法式的封装,是系统停止资本调剂和分派的的根基单元,实现了操纵系统的并发;
线程是进程的子使命,是CPU调剂和分拨的根基单元,用于保证法式的实时性,实现进程内部的并发;线程是操纵系统可识此外最小履行和调剂单元。进程由单个或多个线程组成。
一个线程只能属于一个进程,而一个进程可以有多个线程;
进程是资本分派的最小单元,线程是CPU调剂的最小单元。
阅读器的多线程模子

翻开电脑的活动监视器,可以看到Chrome阅读器的进程运转情况

微信小法式双线程模子-1.jpg

从图中可以看到,Chrome上有多个进程,包括多个标签页进程和通用的阅读器进程和GPU进程等。每个标签页有一个自力的衬着进程,这样设想保证了分歧进程之间资本和行为的自力,就是说立即某一个标签页解体也不会影响其他的标签页,而每个标签页进程中又包括了以下几个进程合作完成各项工作

  • GUI线程:负责将文档内容衬着为可视化UI
  • JavaScript引擎线程:负责剖析和运转JavaScript逻辑代码
  • 按时触发器线程:负责处置setTimeout/setInterval 按时器
  • 异步http请求线程:处置XHR异步请求,比如回调函数注册进事务行列
  • 事务触发线程:首要用来控制事务循环
阅读器JavaScript引擎线程和GUI衬着线程是互斥的,js履行时会阻塞UI衬着,甚至履行时候太长会形成页面卡死。但这并不代表阅读器是单线程的。
微信小法式的双线程模子

小法式与阅读器分歧,小法式是双线程模子,衬着层利用Webview作为衬着载体,一个页面是一个WebView,所以衬着层会有多个WebView。 逻辑层则利用JavaScript引擎剖析和履行JS逻辑代码。衬着层和逻辑层别离由两个线程停止治理,而在分歧运转情况中,利用的衬着引擎和JavaScript引擎也不尽不异。
运转情况衬着引擎JavaScript引擎
AndroidChromium定制内核V8
IOSWKWebviewJSCore
微信开辟者工具Chrome WbbViewNWJS
逻辑层与衬着层之间的通讯

小法式运转时,逻辑层履行JavaScript逻辑代码,将数据经过挪用setData函数传递到衬着层,衬着层经过WXML、WXSS的内容连系传递过来的数据完成页面UI的衬着。而setData函数的背后并不是只要一句话这么简单。

微信小法式双线程模子-2.jpg
两个线程的通讯是基于微信客户端供给的WeixinJsBridge来实现的,望文生义它是一个桥梁,将小法式的运转情况和微信客户端(native毗连了起来),同时也负责在衬着进程和逻辑进程之间传递数据和事务的工作。
数据传输经过逻辑层和视图层双方供给的evaluateJavascript实现的,用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 剧本,再经过履行 JS 剧本的形式传递到双方的自力情况。
除了毗连衬着进程和逻辑进程,微信小法式的请求也是经过WeixinJsBridge由微信客户端代为倡议。
双线程模子的优弱点


  • 双线程模子的上风在于供给了相对封锁战争安的运转情况,将逻辑层和衬着层隔分开,用户没法间接操纵DOM,具有更高的平安性。
  • 弱点在于每一次数据传递都要停止一次线程之间的通讯,当数据更新频仍大概传递数据量较大时会难以避免的出现性能题目。
参考文档


  • 进程和线程的概念、区分及进程线程间通讯
  • 小法式双线程模子
  • 微信小法式的架构以及为什么要用到双线程
回复

使用道具

说点什么

您需要登录后才可以回帖 登录 | 立即注册
HOT • 推荐

神回复

站长姓名:王殿武 杭州共生网络科技 创始人 云裂变新零售系统 创始人 飞商人脉对接平台 创始人 同城交友聚会平台 创始人 生活经验分享社区 创始人 合作微信:15924191378(注明来意)