weex原理

2018-12-13  本文已影响10人  Adam_潜

weex是用JavaScriptCore来运行js的, JavaScriptcore是和google的v8一样的js引擎
weex所做的事情就是在native端实现dom解析和渲染, 提供可扩展的功能和组件库,使得同一份js代码能在三端运行:


image.png

https://www.jianshu.com/p/36412882f81d
IOS的JavaScriptCore的

https://www.jianshu.com/p/9a986686f9fb
Weex-iOS源码阅读(一)初始化和函数调用

https://www.jianshu.com/p/5090c60d5af0
Weex iOS源码解析(二):Module机制

Weex 表面上是一个客户端技术,但实际上它串联起了从本地开发、云端部署到分发的整个链路。
开发者首先可在本地像编写 web 页面一样编写一个 app 的界面,然后通过命令行工具将之编译成一段 JavaScript 代码,生成一个 Weex 的 JS bundle;

同时,开发者可以将生成的 JS bundle 部署至云端,然后通过网络请求或预下发的方式加载至用户的移动应用客户端;

Weex 的 iOS 和 Android 客户端中都会运行一个 JavaScript 引擎,来执行 JS bundle,同时向各端的渲染层发送规范化的指令,调度客户端的渲染并实现其它各种能力。

我们在 iOS 下选择了基于 JavaScriptCore 内核的iOS系统提供的 JSContext. 经过长期优化与多种业务场景检验,JavaScriptCore 无论是从性能还是稳定性方面都为Weex提供了强有力的保障,同时也保证了双端 JavaScript 引擎的统一,更有利于开发者调试跨端的 JavaScript 错误。

为了让整个移动应用的资源利用得更好,我们在客户端提供的 JavaScript 引擎是单例的,即所有 JS bundle 公用一个 JavaScript 执行环境实例,同时对每个 JS bundle 在运行时进行了上下文的隔离,使得每个 JS bundle 都能够高效安全的工作。我们还把 Vue 2.0 这样的 JS Framework 做了预置,开发者不必把 JS Framework 打包在每个 JS bundle 里,从而大大减少了 JS bundle 的体积,也就进一步保障了页面打开的速度。

Weex 目前提供了 iOS 和 Android 两个客户端的 native 渲染层。每个端都基于 DOM 模型设计并实现了标准的界面渲染接口供 JavaScript 引擎调用。并且结合 web 标准和 native 的特点和优势实现了一套统一的组件和模块。Weex 在性能方面的表现也是非常优异的,尤其是界面首屏加载时间、native 下长列表的资源开销和复用、CPU、内存、帧率等关键指标。当然,尽管 Weex 已经提供了一组开发者最常用的组件和模块,但面对丰富多样的移动应用研发需求,这些常用基础组件还是远远不够的,因此我们提供了灵活自由的能力扩展方式,开发者可以根据自身的情况定制属于自己的客户端组件和模块,进一步丰富 Weex 在客户端上的能力。

上一篇下一篇

猜你喜欢

热点阅读