原理很重要 : Weex到底是怎么运行的?
总体结构
Weex从表面上看是一种客户端技术,实际上它连接了从本地开发环境到云部署和分发的整个过程。
开发人员可以先编写一个应用程序页面,就像编写一个网页一样,然后将应用程序页面编译成一段名为Weex JS的JavaScript包。
在云中,开发人员可以部署生成的JS包。然后可以使用WeexSDK从移动应用程序请求或预取。
WeexSDK会在用户打开一个Weex页面的时候准备一个JavaScript引擎来运行相应的JS bundle。通常情况下,JS bundle会通过Weex JS bridge来调用本地端。它们让本地端渲染用户界面或处理用户交互,存储数据,进行网络通信,调用设备权力等。
即使用户没有安装应用程序,他仍然可以使用相同的源代码在浏览器中打开相同的网页。

地方发展环境
Weex本地开发环境的设计基于Web开发经验。它帮助Web开发人员用他们熟悉的HTML / CSS / JavaScript编写移动应用程序界面。同时,Weex也对Vue.js提供官方支持,这是一个非常棒的前端框架。
另外,一个Weex项目的管理也非常熟悉一个Web项目。首先,Web开发人员可以使用npm包来管理依赖关系。其次,Web开发人员可以参考Web项目每个过程的所有最佳实践,如脚手架,开发,预览,调试,测试等。
与Web开发的最佳实践一样,每个Weex页面将被构建到一个JS包中。在浏览器中,我们把JS包作为<script>标签放到网页中。在客户端,我们把JS包放到本地,然后在WeexSDK中执行它。
云部署和分发
Weex JS包可以作为静态资源进行部署和分发。几乎所有当前的Web开发系统和最佳实践都可以直接应用到Weex中,比如通过CMS系统生成JS包,或者将JS包部署到静态CDN,通过服务器日志监控JS包流量,缓存或预取JS包以降低网络成本等等
客户端JavaScript引擎
Weex的iOS和Android客户端都运行JavaScript引擎来执行JS捆绑包,并将定义好的指令发送到本地渲染层。我们在iOS中选择JavaScriptCore,在Android中选择v8,从而提供强大的性能和稳定性。
为了更好地利用移动资源,我们只为所有Weex页面运行一个JavaScript实例。也就是说,所有JS捆绑包都共享相同的JavaScript实例,但是每个JS捆绑包上下文在运行时默认情况下也是相互隔离的。我们也把Vue 2.0作为一个内置的JS框架,开发人员不必把它打包在每个JS包中,这样可以节省网络的大小和时间。
客户端呈现图层
Weex提供iOS和Android本地渲染图层。它们每个都基于Native DOM模型,并暴露于JavaScript API。同时我们提供一套本地组件和模块来使用。此外,Weex在首屏加载时间,内存成本和长列表的再使用等方面都有很高的性能。
尽管Weex正式提供了一组最常用的组件和模块。但我们肯定知道他们不能满足每个人。所以我们设计我们的原生渲染尽可能地扩展。您可以自行扩展更多的组件和模块。我们可以一起建立和共享一个Weex生态系统。
在浏览器中
除了iOS和Android客户端外,Weex还有一个基于Vue 2.0的Web版本。开发人员可以使用Vue 2.0在浏览器中构建相同的页面。