企业数字化转型:钉钉小程序开发权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2.3 为什么“没有DOM”

WKWebView及JavaScriptCore提供了小程序的运行环境。WKWebView负责对AXML和ACSS进行解析和执行,并渲染和展示。JavaScriptCore(Android是serviceWork)提供了开发者所写的逻辑代码(JavaScript)的运行环境,该运行环境被称为Service(没有Document、Window等对象),Service中的代码与WebView中的代码完全隔离,如图2-3所示。

图2-3 小程序前端框架

通俗来说,在小程序中JavaScript逻辑的运行和视图的运行是在两个不同环境中的,App Service通过底层架构来操作视图。因为JavaScript和视图(DOM所在)没有运行在同一容器中[在传统H5,JavaScript和视图(DOM所在)运行在同一容器中],且小程序的JavaScript逻辑是用JavaScriptCore来解析的,JavaScriptCore没有Document、Window等对象,所以小程序不能使用DOM操作(并不是真的没有DOM)。每启动一个Page页面,会有一个Render容器启动WebView+Service,所以层级过多的小程序也是不推荐的。

一个小程序页面对应一个 Service,客户端通过 JavaScriptCore为开发者的Service代码提供运行环境;一个小程序可能有一个或多个Page作为向用户展示内容的交互页面,客户端由WKWebView提供Page解析和渲染支持;页面与页面之间的通信通过Service环境中转。