“得移动端者得天下”,移动端取代PC端,成为了互联网行业最大的流量分发入口,所以很多公司制定了“移动优先”的发展策略。前端
为了帮助读者更好地学习WEEX,本节将对React Native、Weex和Flutter等主流的跨平台方案进行简单的介绍和对比。node
React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的React框架在原生移动应用平台的衍生产物,目前主要支持iOS和安卓两大平台。react
RN使用Javascript语言来开发移动应用,但UI渲染、网络请求等均由原生端实现。具体来讲,开发者编写的Javascript代码,经过中间层转化为原生控件后再执行,所以熟悉Web前端开发的技术人员只需不多的学习就能够进入移动应用开发领域,并能够在不牺牲用户体验的前提下提升开发效率。android
做为一个跨平台技术框架,RN从上到下能够分为Javascript层、C++层和Native层。其中,C++层主要用于实现动态连结库(.so),做为中间适配层桥接,实现js端与原生端的双向通讯交互,以下图所示是RN在Android平台上的通讯原理图。 ios
在RN的三层架构中,最核心的就是中间的C++层,C++层最核心的功能就是封装JavaScriptCore,用于执行对js的解析。同时,原生端提供的各类Native Module(如网络请求,ViewGroup控件模块)和JS端提供的各类JS Module(如JS EventEmiter模块)都会在C++实现的so文件中保存起来,最终经过C++层中的保存的映射实现两端的交互。 git
在RN开发过程当中,大多数状况下开发人员并不须要须要了解RN框架的具体细节,只须要专一JS端的逻辑代码实现便可。可是须要注意的是,因为js代码是运行在独立的JS线程中,因此在js中不能处理耗时的操做,如fetch、图片加载和数据持久化等操做。github
最终,JS代码会被打包成一个bundle文件并自动添加到应用程序的资源目录下,而应用程序最终加载的也是打包后的bundle文件。RN的打包脚本位于“/node_modules/react-native/local-cli”目录下,打包后经过metro模块压缩成bundle文件,而bundle文件只包含打包js的代码,并不包含图片、多媒体等静态资源,而打包后的静态资源会是被拷贝到对应的平台资源文件夹中。npm
总的来讲,RN使用Javascript来编写应用程序,而后调用原生组件执行页面渲染操做,在提升了开发效率的同时又保留了Native的用户体验。而且,伴随着Facebook重构RN工做的完成,RN也将变得更快、更轻量、性能更好。编程
做为一套前端跨平台技术框架,Weex创建了一套源码转换以及Native与Js通讯的机制。Weex表面上是一个客户端框架,但实际上它串联起了从本地开发、云端部署到分发的整个链路。 具体来讲,在开发阶段编写一个.we文件,而后使用Weex提供的weex-toolkit转换工具将.we文件转换为JS bundle,并将生成的JS bundle上传部署到云端,最后经过网络请求或预下发的方式加载至用户的移动应用客户端。当集成了Weex SDK的客户端接收到JS bundle文件后,调用本地的JavaScript引擎执行环境执行相应的JS bundle,并将执行过程当中产生的各类命令发送到native端进行界面渲染、数据存储、网络通讯以及用户交互响应。 react-native
当JS bundle从服务器下载完成以后,Weex的Android、iOS和H5会运行一个JavaScript引擎来执行JS bundle,同时向各终端的渲染层发送渲染指令,并调度客户端的渲染引擎实现视图渲染、事件绑定和处理用户交互等操做。 因为Android、iOS和H5等终端最终使用的是native渲染引擎,也就是说使用同一套代码在不一样终端上展现的样式是相同的,而且Weex使用native引擎渲染的是native组件,因此在性能上比传统的WebView方案要好不少。
固然,尽管Weex已经提供了开发者所须要的最经常使用的组件和模块,但面对丰富多样的移动应用研发需求,这些经常使用基础组件仍是远远不能知足开发的须要,所以Weex提供了灵活自由的扩展能力,开发者能够根据自身的状况定制属于本身客户端的组件和模块,从而丰富Weex生态。
Flutter是Google开源的移动跨平台框架,其历史最先能够追溯到2015年的Sky项目,该项目能够同时运行在Android、iOS和fuchsia等包含Dart虚拟机的平台上,而且性能无限接近原生。相较于RN和Weex使用Javascript做为编程语言与使用平台自身引擎渲染界面不一样,Flutter直接选择2D绘图引擎库skia来渲染界面。
PWA,全称Progressive Web App,是Google在2015年提出渐进式的网页技术。PWA结合了一系列的现代Web技术,并使用多种技术来加强Web App的功能,最终可让网页应用呈现和原生应用类似的体验。
相比于传统的网页技术,渐进式Web技术是能够横跨Web技术及Native APP开发的技术解决方案,具备可靠、快速且可参与等诸多特色。
具体来讲,当用户从手机主屏幕启动时,不用考虑网络的状态就能够马上加载出PWA。而且,相比传统的网页加载速度,PWA的加载速度是很是快的,由于PWA使用了Service Worker 等先进技术。除此以外,PWA还能够被添加在用户的主屏幕上,不用从应用商店进行下载便可经过网络应用程序Manifest file提供相似于APP的使用体验。
做为一种全新Web技术方案,PWA的正常工做须要一些重要的技术组件,它们协同工做并为传统的Web应用程序注入活力,如图1-8所示。
Manifest则是W3C一个技术规范,它定义了基于JSON的清单,为开发人员提供一个放置与Web应用程序关联的元数据的集中地点。Manifest是PWA 开发中的重要一环,它为开发人员控制应用程序提供了可能。
目前,渐进式Web应用还处于起步阶段,使用的厂商也是诸如Twitter、淘宝、微博等大平台。不过,PWA做为Google主推的一项技术标准,Edge、Safari和FireFox等主流浏览器也都开始支持渐进式Web应用。所以,能够预见的是,PWA必将成为继移动以后的又一革命性技术方案。
在当前诸多的跨平台方案中,RN、Weex和Flutter无疑是最优秀的。而从不一样的细节来看,三大跨平台框架又有各自的优势和缺点,能够经过表1-1来查看。
对比类型 | React Native | Weex | Flutter |
---|---|---|---|
支持平台 | Android/IOS | Android/IOS/Web | Android/IOS |
实现技术 | JavaScript | JavaScript | 原生编码/渲染 |
引擎 | JS V8 | JSCore | Flutter Engine |
编程语言 | React | Vue | Dart |
bundle包大小 | 单1、较大 | 较小、多页面 | 不须要 |
框架程度 | 较重 | 较轻 | 重 |
社区 | 活跃、FB维护 | 不活跃 | 活跃 |
如上表所示,RN、Weex采用的技术方案大致相同,它们都使用JavaScript做为编程语言,而后经过中间层转换为原生的组件后再利用Native渲染引擎执行渲染操做。而Flutter直接使用skia来渲染视图,而Flutter Widget则使用现代响应式框架来构建,和平台没有直接的关系。就目前跨平台技术来看,JavaScript在跨平台开发中可谓占据半壁江山,大有“一统天下”的趋势。 从性能方面来讲,Flutter的性能理论上是最好的,RN和Weex次之,而且都好于传统的WebView方案。但从目前的实际应用来看却并无太大的差距,特别是和0.5.0版本以上的RN对比性能体验上差别并不明显。 而从社群和社区的活跃来看,RN和Flutter无疑是最活跃的,RN通过4年多的发展已经成长为跨平台开发的实际领导者,并拥有各种丰富的第三方库和开发群体。Flutter做为最近才火起来的跨平台技术方案,不过目前还处在beta阶段,商用的实例也不多,不过应该看到google的号召力一直是很强,将来究竟如何发展让咱们拭目以待。
eros-yanxuan 是基于 eros 开发的Weex项目,部分页面参考了项目网易严选 weex 版本,欢迎star或fork。
确保你本地已经集成了 eros 开发所需的环境。
clone 项目到本地:
$ git clone https://github.com/xiangzhihong/eros-yanxuan.git
复制代码
进入目录,下载前端所需的依赖:
$ cd eros-yanxuan
$ npm install
复制代码
打开platforms目录下的WeexEros项目,在WeexEros中使用pod添加依赖。
$ cd platforms/ios/WeexEros
$ pod update // 下载 iOS 依赖
$ open WeexEros.xcworkspace // 自动打开项目
复制代码
选中模拟器,点击绿色箭头运行 app 便可。
对于Android工程来讲,使用Android Studio打开platforms目录下的WeexFrameworkWrapper的Android工程,而后使用install.sh安装Android工程的须要依赖包nexus和wxframework。
具体能够参考自行导入项目,即可运行起来。
eros dev
运行过程当中出现问题在如下地址解决方法,若是没有找到,能够参考eros快速入门新建一个Weex工程,而后将src和配置文件的代码拷贝过去。 若是还有问题,请加群:515980159