双线程模型
为什么使用双线程模型?
个人理解总结:
小程序的架构设计时,要求渲染快、加载快。渲染页面的技术主要分为三种:
- 纯客户端原生技术渲染(纯客户端技术需要与微信代码一起编包,跟随微信发布版本,这样的开发节奏不对);
- 纯web技术渲染(纯web技术,那么一些复杂交互页面可能面临一些性能问题,因为Web技术中,UI和JS的脚本在单线程中,这样容易导致逻辑任务抢占UI渲染资源。);
- 介于客户端技术和Web技术之间(Hybrid技术)。
最终选取的是类似微信JSSDK之后这样的HyBrid技术,页面用Web技术渲染,辅之以大量的接口提供丰富的客户端原生能力。同时,每个小程序的页面都是使用不同的WebView渲染。
如果开发者可以直接通过JS操作界面的DOM树,那么一些敏感数据就毫无安全性可言,故微信提供了一个沙箱的环境来运行开发者的JS代码,这个环境不能有任何的浏览器先关的接口,只能通过JS解释执行环境,类似于HTML5的ServiceWorker启动另一个线程来执行JS。
但由于小程序是多WebView的架构,所以每一个页面都是不同的WebView渲染显示,所以单独创建了一个线程去执行JS,也就是逻辑层,而界面渲染的任务都在WebView线程里执行(渲染层)。即双线程模型。