在开发阶段,跨平台开发App面临一个很重要的决定,到底是应该使用原生技术开发应用还是使用hybird或者基于web的技术。这些问题将会影响着大量的开发工作-也就是说,最近选择继续使用原生的方法开发应用意味着让你的开发团队同时使用 Objective C/Swift (iOS)和 Java (Android )开发功能。这对于开发原生的应用并没有什么可以讨论的。下面我们将看到用javascript通过使用React Native或者使用Angular2和NativeScript联合去开发跨平台的原生应用。我们可以看一下这两种方式都提供哪些方法,然后去比较两者,希望能给开发者选择技术方式有一定的启发。
为什么选择Native?
Native App 比hybird和基于H5的应用有很多优点。首先,Native 应用更接近设备底层,意味着原生应用代码的执行效率比hybird框架高。另外,Native应用还可以让你使用很多hybird框架用不了的特性,你可以使用更多特定的平台下很多特性,特别是与硬件结合的部分可以在一组源代码中完成,而不用在hybird应用中包含自定义的模块或者非web的组件。这些特性能提供一个良好的用户体验,所以使用Native方式开发应用变动越来越流行。通过使用native组件的框架,我们可以减少原生app开发的花费。
React Rective
在2015年3月,Facebook推出了React Native,允许开发者使用相同的javascript代码运行在iOS或者Android上的框架。React是一组具有最小的外部副作用和对DOM依赖的一系列函数。React能够将使用DOM作为主要的渲染模型,这种设计模式使得替换本地组件变得简单,而不是使用原来的那种web视图和HTML组件的方式。因此,使用相同的代码应用可以在iOS上使用UIAlertView上使用AlertDialog 实现警告弹窗,而不用写任何额外的代码去支持UI视图。这些特性都使得React专注于速度和脏渲染相结合,你可以用一个代码库快速构建跨平台的移动应用。
AngularJS 2 + NativeScript
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运行在所有的手机平台。
两者比较
在比较React Native和NativeScript 这两个以解决native开发为重心的解决方案时,关键是看它们是怎么样从相同的代码构建应用的。NativeScript 采用了整体性的解决方案,真正实现了"一次编写,到处运行"。这意味着许多UI元素会降低级别,因为NativeScript尝试在多个平台间可以透明和可重复的方式管理这些UI组件。随着Angular2的加入,你可以通过Angular核心的UI指令的优点去创建跨平台的应用,这些指令可以比在多个应用之间创建UI组件更具有一致性。
在辩论的另一方是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应用程序,同时保持类似的开发模式和程序体系结构。