在开发阶段,跨平台开发App面临一个很重要的决定,究竟是应该使用原生技术开发应用仍是使用hybird或者基于web的技术。这些问题将会影响着大量的开发工做-也就是说,最近选择继续使用原生的方法开发应用意味着让你的开发团队同时使用 Objective C/Swift (iOS)和 Java (Android )开发功能。这对于开发原生的应用并无什么能够讨论的。下面咱们将看到用javascript经过使用React Native或者使用Angular2和NativeScript联合去开发跨平台的原生应用。咱们能够看一下这两种方式都提供哪些方法,而后去比较二者,但愿能给开发者选择技术方式有必定的启发。javascript
Native App 比hybird和基于H5的应用有不少优势。首先,Native 应用更接近设备底层,意味着原生应用代码的执行效率比hybird框架高。另外,Native应用还可让你使用不少hybird框架用不了的特性,你可使用更多特定的平台下不少特性,特别是与硬件结合的部分能够在一组源代码中完成,而不用在hybird应用中包含自定义的模块或者非web的组件。这些特性能提供一个良好的用户体验,因此使用Native方式开发应用变更愈来愈流行。经过使用native组件的框架,咱们能够减小原生app开发的花费。java
在2015年3月,Facebook推出了React Native,容许开发者使用相同的javascript代码运行在iOS或者Android上的框架。React是一组具备最小的外部反作用和对DOM依赖的一系列函数。React可以将使用DOM做为主要的渲染模型,这种设计模式使得替换本地组件变得简单,而不是使用原来的那种web视图和HTML组件的方式。所以,使用相同的代码应用能够在iOS上使用UIAlertView上使用AlertDialog 实现警告弹窗,而不用写任何额外的代码去支持UI视图。这些特性都使得React专一于速度和脏渲染相结合,你能够用一个代码库快速构建跨平台的移动应用。react
Telerik的团队最初集成Angular开发了Kendo UI库。它做为一个跨平台的开发工具,为开发hybord应用和H5应用提供了一个一致性的跨平台UI体验。当Telerik开始使用NativeScript来提供真正的跨平台应用时,他发现Angular 1.x对DOM的紧耦合的依赖性在用Angular开发应用建立native UI映射时呈现的问题。然而,随着Angular2的到来,一切都变了。Angular2对DOM的松耦合容许NativeScript开发者和React Native同样的机制-抽象视图和组件渲染,这使得DOM再也不是必需的。Angular2很容易和NativeScript集成,容许你开发同样风格的native app运行在全部的手机平台。web
在比较React Native和NativeScript 这两个以解决native开发为重心的解决方案时,关键是看它们是怎么样从相同的代码构建应用的。NativeScript 采用了总体性的解决方案,真正实现了"一次编写,处处运行"。这意味着许多UI元素会下降级别,由于NativeScript尝试在多个平台间能够透明和可重复的方式管理这些UI组件。随着Angular2的加入,你能够经过Angular核心的UI指令的优势去建立跨平台的应用,这些指令能够比在多个应用之间建立UI组件更具备一致性。react-native
在辩论的另外一方是React Native,它选择拥抱-而不是隐藏其多平台的性质。这意味着虽然您能够以平台无关的方式编写React Native代码,但你也能够访问特定平台的UI控件。另外一方面,React的目标是抽象业务逻辑,同时支持每一个平台之间的UI呈现固有的差别,而NativeScript专一于建立一个单一的开发体验而与平台无关。React的重点放在高性能的渲染和执行上,你能够很轻松的建立高性能的跨平台应用,这些应用能够在相同的代码库上运行而且随意使用特色平台的组件。使用哪一种方式应该依据你的应用综合考虑,相对通用的数据驱动的应用程序可能更欢NativeScript,由于它的UI一般不足以知足以平台为中心的应用。尽管是这样,在web应用中使用Angular2来驱动的应用架构也会比React Native有不少性能优点。无论怎么样,使用Angular2和NativeScript须要去使用传统的Angular架构去构建你的代码,可是React Native能够没必要如此。另外,使用NativeScript和Angular2构建应用,会向应用程序的管道中引入附加的依赖关系,这个问题不像React Native那样明显,它能够处理React框架中的全部跨平台功能。设计模式
跨平台开发已经在迅速的发展,最近跨平台和原生开发框架的激增只会继续这种势头。选择React Native和Angular2结合NativeScript,换一种方式说,就像选择React和Angular框架自身。React被设计做为一个快速轻量的渲染框架在大型应用中使用,React Native延续了这种设计设计的模式。另外一方面,Angular是一个有意识的应用程序开发框架,它具备开发应用程序的“正确方法”,Angular 2和NativeScript的集成进一步减小了小型的设备集成的费用。所以,二者之间的选择在很大程度上是相同的。你的应用是集中在大量的渲染复杂UI和传统元素吗?若是是,React Native比较适合你。可是,若是有一个声明式用户界面模式的单一跨平台代码库的应用程序架构,那么结合Angular2和NativeScript能够帮助你实如今采用Angular用于Web应用程序,同时保持相似的开发模式和程序体系结构。架构
原文连接app