# 前言
接上一章节,这一章节中我们将对逻辑层的底层基础库WAService.js进行一个分析,看看里面都有哪些模块。
本章内容分解:
- 逻辑层基础库源码解析
# WAService.js注入
我们依然是重温一下在哪里看到过逻辑层基础库的注入。和渲染层基础库是一样的,在最开始章节找寻小程序逻辑层代码中我们找寻到了逻辑层基础库的注入:

# 模块分析
首先我们进行WAService.js文件的解析。在我们2.17.3版本的基础库包中,逻辑层基础库代码大概有11万行。
我们依然使用传统的折叠法,对代码进行折叠,然后进行分析。
我们从上往下进行分析,第一个模块是core-js模块。
# core-js模块
第一个模块与渲染层基础库中是一样的,core-js模块。

# Foundation
Foundation是基础模块。我们来看一下声明的核心位置,在文件的4283行左右。

与渲染层一致
# WeixinJSBridge
WeixinJSBridge通讯模块,在4536行左右。

可以看到WeixinJSBridge通讯模块中包含了我们在通讯系统章节讲解的通讯api,包含有on、publish、invoke、subscribe、invokeCallbackHandler、subscribeHandler。
通讯系统的具体实现在通讯系统章节有讲解,这里只是对Native注入通讯api的封装,便于内部调用。
这里与渲染层基础库也是一致的。
# NativeBuffer模块
NativeBuffer模块的定义在文件4924行左右。

javascript语言自身只有字符串数据类型,没有二进制数据类型。 但在处理像TCP流或文件流时,必须使用到二进制数据。因此在微信小程序中,定义了一个NativeBuffer模块,该模块用来创建一个专门存放二进制数据的缓存区。
# 日志打印模块
日志打印模块在文件5028行左右。

日志打印模块包含wxNativeConsole、wxConsole、wxPerfConsole等,与WAService.js相比少了一个__webviewConsole__,
# WeixinWorker模块
worker模块在文件5195行左右。

内部包含创建worker、结束当前workder、发送数据请求、监听回调等方法。
# JSContext模块
JSContext在文件5328行左右。

JsContext 是js代码执行的上下文对象,相当于一个 webview 中的 window 对象。在同一个 VM 中,你可以传递不同的 Context。
# __appServiceEngine__模块
最后很大部分模块都是此模块,__appServiceEngine__,提供了App、Page、Component、Behavior、getApp、getCurrentPages等框架的基本对外接口。在文件109273行左右。

声明位置:

路由的跳转,优雅的triggerLifeTime

# Exparser模块
Exparser组件系统提供了框架底层的能力,如实例化组件,数据变化监听,View 层与逻辑层的交互等。在文件100703行左右。

# virtualDOM模块
__virtualDOM__连接着__appServiceEngine__和exparser,如对开发者传入Page方法的对象进行格式化再传入exparser的对应方法处理。在文件104
