目录
小程序的由来
在传统WEB开发中,在渲染网页的过程中, 执行Javascript,和解析HTML是两个互斥的过程。
这意味着执行复杂Javascript代码,可能则会阻塞UI渲染,导致网页交互会卡顿或者白屏。(参见浏览器渲染网页流程)
从性能(解析JS和HTML并行执行)和安全(对外隔离操作DOM的API)的角度考虑, 微信团队研发小程序。
具体来说。
架构:渲染与逻辑的分离
小程序的运行环境分成视图层和逻辑层,采用双线程模型工作。
逻辑层线程负责:执行JS代码,产生和处理数据。
视图层线程负责:解析页面标签,构建DOM树和Render树,最终渲染页面。
逻辑层线程产生的数据,通过JsBridge协议,传递给Native层,Native层与渲染线程中的数据进行差异比较,Native层通知渲染线程,依据diff来更新UI元素。
问题
微信客户端打开一个小程序会新开一个进程吗?
答案:是的。 小程序之间要彼此进程隔离,保证数据安全。
JavascriptCore是什么?
JavascriptCore是javascript的一种运行时环境。
在Android/IOS操作系统中, 页面渲染的环境和js的运行环境如下表格所示:
IOS | Android | |
渲染线程 | WKWebView | 在微信自研的X5WebView |
逻辑线程 | javascriptCore | v8引擎 |
小程序的数据是存储在哪个位置?
- 微信为每个小程序提供了最大上限为10M本地缓存的能力。不同小程序的缓存不能相互访问。
- 数据wx.setStorageSync(key,value)/getStorage(key) 是异步通信,数据是在native侧管理的。
小程序包有限制吗?
- 整个小程序所有分包大小不超过 20M
- 单个分包/主包大小不能超过 2M