选型:渲染界面的技术
纯客户端原生渲染 缺点:无法动态打包,动态下发。
纯Web技术来渲染 缺点:在一些复杂交互的页面上可能会面临一些性能问题。
同时,在Web技术中,UI渲染跟JavaScript脚本执行都是在一个单线程中执行,容易导致抢占资源。
客户端原生 + Web 优点:
界面主要由成熟的Web技术来渲染,辅之以大量的接口提供丰富的客户端原生能力。
同时,每个小程序页面都是用不同的WebView来渲染,更贴近原生体验,避免单个WebView任务过于繁重。
选型:脚本执行的环境
由于JavaScript的灵活性和浏览器的功能丰富,会导致很多不可控的隐私,因此,微信提供了一个单纯的JS执行环境。
通过对其中的控件进行自定义,保证了采用这个沙箱环境之后,不会有任何浏览器相关的接口,没有BOM和DOM对象。
考虑到小程序是一个多WebView架构,每个页面都是由不同的WebView渲染后显示的,
在这个架构下,我们不好去用某个WebView中的ServiceWorker去管理所有的小程序页面。
得益于客户端具有的JS解释引擎,可以创建一个单独的线程去执行JS,在这个环境下执行的都是有关小程序业务逻辑的代码。
这就是小程序双线程(渲染层+逻辑层)模型的由来。
双线程模型
小程序的运行环境分为视图层(View Thread)和逻辑层(Appserv