参考资料:http://www.360doc.com/content/17/0407/09/40156408_643535157.shtml
运行环境
- 开发: nw.js(c++实现的web转桌面应用)
- ios: webkit(苹果开源内核)
- android: x5(QQ浏览器内核)
架构
小程序的框架主要包含两部分:
- view视图 — 用于渲染页面结构。
- App Server逻辑层。—- 用于处理数据请求,逻辑处理,接口请求
以上两个部分是在两个进程(webview)境里面运行的,视图层和逻辑层通过系统层:JSBridage通信。逻辑层把数据变化通知到视图层,触发视图更新,视图层把触发的事件通知到逻辑层进行业务处理
技术实现
打开一个小程序至少有两个webview进程
- appServer: 逻辑处理的js代码加载到此, 整个小程序只有一个,并且整个生命周期常驻内存
- appView: 所有的视图都是单独的appView来承载
小程序不允许打开超过5个webview的页面
AppServer
主要负责逻辑处理部分的执行,底层提供一个WAService.js的文件来提供各种接口
- 日志组件Reporter封装
- wx对象下的api方法
- 全局的app,page,getApp,getCurrentPages等等方法
- 对AMD模块的实现(所有的依赖模块都是先加载的)
AppView
提供UI渲染,底层提供一个WAWbeview.js来提供底层的功能
server和view通信
使用消息publish和subscribe机制实现两个webview之间的通信。实现方式就是统一封装一个WeixinJSBridge对象
- windows: 通过windows.postMessage实现发送消息,windows.addEventListener()实现消息接收
- ios: 通过WKWebview的windows.webkit.messageHandles.NAME.postMessage实现
- android: 通过WeixinJSCode.invokeHandle实现