- Published on
小程序原理简述
- Authors
- Name
- hpoenixf
双线程架构与渲染原理
双线程架构概述
- 逻辑层:
- 使用
JavaScriptCore
(JSC) 运行 JavaScript 脚本。
- 使用
- 渲染层:
- 使用
WebView
渲染页面。
- 使用
线程之间的通信
- 两个线程通过 Native 微信客户端 进行通信。
- 微信客户端还负责 发送网络请求。
双线程的优势
- 隔离操作:
- 开发者无法直接操作 DOM 或跳转页面。
- 安全性:
- 便于管控危险 API,避免安全问题。
- 性能优化:
- 渲染和逻辑分离,减少互相阻塞。
渲染方法:数据驱动
- 数据传输:
- 在逻辑层调用
setData
方法时,将数据序列化为字符串并传输到渲染层。
- 在逻辑层调用
- 数据处理:
- 渲染层 (WebView) 在页面空闲时接收数据。
- 渲染流程:
- 合并数据:将新数据与旧数据合并。
- Diff 算法:比较节点树的差异,更新需要变化的 UI 部分。
- 更新 UI:将计算结果反映到页面上。
限制
- 每个视图使用独立的 WebView。
- 视图数量限制:不能超过 5 个 WebView。
与 React Native (RN) 的对比
- CSS 支持:
- 双线程架构对 CSS 的支持更好,接近 Web 标准。
- 稳定性:
- RN 存在较多 Bug,双线程架构更稳定。
- 法律风险:
- 双线程架构避免了 RN 的专利问题。
渲染策略
- 小程序:
- WebView 渲染页面。
- 部分原生组件由客户端直接渲染。
- React Native:
- 由客户端直接渲染所有内容。
同层渲染
iOS
- 使用
WKChildScrollView
:- 将原生组件挂载到支持
overflow: scrolling
和touch
的组件下方。
- 将原生组件挂载到支持
Android
- 使用
WebPlugin
实现类似的功能。
双线程架构通过逻辑层和渲染层的分离,提高了小程序的安全性和性能,同时通过数据驱动的渲染方式实现了轻量级、高效的前端体验。