首页 > 应用开发 > IT综合 > 冷门前端知识,介绍双线程的小程序!
小程序的渲染层和逻辑层分别由2个线程理:渲染层的界面使用了WebView进行渲染,逻辑层采用JsCore线程运行JS脚本。为什么要这么设计呢?跟 陕西优就业 小编一起看看吧!
管控和安全,为了解决这些问题,我们需要阻止开发者使用一些浏览器提供的,诸如跳转页面、操作 DOM、动态执行脚本的开放性接口。
我们可以使用客户端系统的JavaScript引擎,iOS下的JavaScriptCore 框架,安卓下腾讯x5内核提供的 JsCore环境。通过提供一个沙箱环境来运行开发者的JavaScript代码来解决。这个沙箱环境只提供纯JavaScript的解释执行环境,没有任何浏览器相关接口。
这就是小程序双线程模型的由来:
1.逻辑层:创建一个单独的线程去执行JavaScript,在这个环境下执行的都是有关小程序业务逻辑的代码
2.渲染层:界面渲染相关的任务全都在WebView线程里执行,通过逻辑层代码去控制渲染哪些界面。一个小程序存在多个界面,所以渲染层存在多个WebView线程
双线程通信:
把开发者的JS逻辑代码放到单独的线程去运行,但在Webview线程里,开发者就没法直接操作DOM。那要怎么去实现动态更改界面呢?
前面我们知道,逻辑层和渲染层的通信会由 Native 做中转,逻辑层发送网络请求也经由Native转发。这是不是意味着,我们可以把 DOM 的更新通过简单的数据通信来实现呢?
Virtual DOM 相信大家都已有了解,大概是这么个过程:用 JS 对象模拟 DOM 树 -> 比较两棵虚拟 DOM 树的差异 -> 把差异应用到真正的 DOM 树上。
在渲染层把 WXML 转化成对应的JS对象。
在逻辑层发生数据变更的时候,通过宿主环境提供的setData方法把数据从逻辑层传递到Native,再转发到渲染层。
经过对比前后差异,把差异应用在原来的DOM树上,更新界面。
我们通过把WXML转化为数据,通过Native进行转发,来实现逻辑层和渲染层的交互和通信。而这样完整的一套框架,基本上都是通过小程序的基础库来完成的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69902581/viewspace-2642983/ ,如需转载,请注明出处,否则将追究法律责任。