【问题标题】:Lost in hybrid app frameworks like Ionic, Cordova,迷失在 Ionic、Cordova 等混合应用程序框架中,
【发布时间】:2016-06-08 23:00:17
【问题描述】:

我目前对所有这些混合移动应用程序框架感到迷茫。它们听起来都很棒,但我找不到任何关于用例和主要区别的真实信息。

有人可以向我解释它们或为我提供大量资源,尤其是关于用例的资源吗?

我知道这些:Apache Cordova、Ionic、PhoneGap、Steroids (AppGyver)、Supersonic (AppGyver)、React Native 和新的 Microsoft Ace (http://microsoft.github.io/ace/)。

免责声明:有可能我将它们完全混合在一起并且它们彼此没有任何关系,因为我很迷茫。

【问题讨论】:

  • 制作一个包含{受欢迎程度、学习难度、测试支持、构建设置、部署难度、可扩展性、API 大小、学习资源(书籍/教程)、核心使用等的列的电子表格。} 然后为每个框架对这些 1-5 中的每一个进行排名。缩小范围,然后通过在每个中构建一些简单的东西来尝试入围者
  • 查看this wiki 以比较跨平台支持工具。
  • 查看这个答案 (stackoverflow.com/questions/33286451/phone-gap-vs-react-native),它可能会为您指明 Hybrid 与 React Native 的方向,但这是一个广泛的问题。您列出的大多数都是cordova,除了 React Native
  • 感谢您的意见。我将使用电子表格进行尝试。当它们都基于 Cordova 时,它们有什么区别。他们会给我某种更高级别的 api 吗?

标签: cordova ionic-framework phonegap-plugins react-native hybrid-mobile-app


【解决方案1】:

我已经研究这个主题至少几年了,并且一直想写一篇深思熟虑的博客文章来总结我所学到的东西,但它似乎从来没有达到我的优先级列表的首位。我将在这里提供一个简短的摘要。

混合应用的三类

  1. 通过 Webview 混合
  2. 通过交叉编译混合
  3. 通过 JavaScript 核心混合

注意:我确信上面有更好的名称,但这是 我现在想出的最好的。


通过 Webview 混合

通常,这些是您上面提到的基于科尔多瓦(又名电话间隙)的应用程序,例如 IonicTouchstoneJSMeteorAppGyver Steroids。事实上,如果我没记错的话,Steroids 是建立在 Ionic 之上的。这些应用程序试图通过使用标准的基于 Web 的技术(html、css、javascript)模仿类似原生的组件(按钮、列表视图、抽屉布局、选项卡视图等)来解决混合问题。为了访问设备的原生组件,他们使用了一个名为 cordova 的桥,它将一个 javascript api 暴露给原生组件,例如相机、gps、位置、振动等。这是一个强大的社区,如果您需要访问原生组件,您'很可能会找到满足您需求的cordova插件。这些类型的应用程序面临的挑战一直是性能。因为他们在WebView(基本上是一个没有chrome的全屏浏览器窗口)中渲染整个应用程序,所以它只有一个线程来渲染整个页面以及执行任何动画等。最后,因为组件很接近,但是不太像原生组件,而且由于性能接近,但不如原生性能那么流畅,这些应用程序往往会落入恐怖谷的某个地方。它们看起来和感觉都不错,但它们从来都不是。

通过交叉编译混合

这些示例将是 Appcelerator's TitaniumXamarin。这些应用程序通过将原生 API 抽象为通用语言来解决混合问题。对于 Titanium,该语言是 JavaScript。对于 Xamarin,该语言是 C#。因此,要在 Xamarin 中编写 Android、iOS、Windows 和桌面应用程序,您需要使用它们的抽象 (API) 在 C# 中编写所有代码,然后将它们交叉编译成实际的本机应用程序。这些方法有正确的想法,但许多人会说在实际实施时它们存在不足。虽然个人使用 Titanium 的经验,但我发现实际上构建应用程序非常痛苦,因为您依赖于它们的抽象。如果他们的抽象层有错误,你就会被卡住……直到他们修复它。

通过 JavaScript 核心混合

据我所知只有两个例子,Facebook's React NativeTelerik's NativeScript。在我看来,这是移动应用程序开发的未来,如果我是你,我会集中精力。这两种方法都试图以类似的方式解决混合问题,因为在每种情况下,开发人员最终都会编写 JavaScript 来创建本机组件,但每种方法都采用了非常不同的方法。 React Native 通过 RCTBridgeModule 将您的 JavaScript 转换为 Native,而 Native Script 通过 JavaScript Virtual Machines 中的一些巧妙技巧让您可以直接访问本机 API。我还没有使用过 NativeScript,所以不知道它有多成熟或性能如何。我安装了他们的示例应用程序,对我来说感觉有点迟钝。我认为它最酷的价值主张之一是它实际上让您可以 100% 访问本机 API(令人兴奋!)。在过去的一年里,我与 React Native 进行了广泛的合作,给我留下了深刻的印象。两者都还很年轻,肯定会成熟。

有用的资源

【讨论】:

  • 我强烈反对将 Appcelerator 和 Xamarin 放在同一个存储桶中。 Appcelerator 在运行时的交叉编译更少,解释更多。他们依靠 JS 引擎来解释 Javascript 并实时翻译为原生。它们还为 UI 提供了一个完整的抽象层,要求您使用它们的小部件构建 UI。 Xamarin 完全编译为本机。在 iOS 上,它编译为字节码,而 Android 部署了一个与 Android 运行时一起存在的 Mono 运行时。此外,Xamarin 提供对所有原生 api 的 100% 访问,保持与纯原生相同的访问级别。
  • 哇,非常感谢。你绝对应该写这篇博文,这是一个非常有趣的话题。我想知道 Microsofts Ace (microsoft.github.io/ace) 位于哪个类别。听起来像第二个,有点第三个?
  • 谢谢你的鼓励,我打算写了。我还没有听说过ace,但我会调查一下。它看起来很独特。不太确定它是如何适应的,但看起来很有希望。除非它流行起来,否则不幸的是,技术有多好并不重要。 React Native 可能是最好的技术,它也已经流行起来并具有发展势头。
  • 无用评论:我还想阅读一篇博客文章,其中还包括“'cordova with ace' vs react native vs xamarin”
  • 还有两个Tabris产品developer.eclipsesource.com/tabristabrisjs.com(据我所知,分别通过交叉编译混合和通过JavaScript核心混合)
【解决方案2】:

我对 react-native 等混合框架的个人经验是,老实说,它们很棒,但是......

  • 用户体验非常接近但不等于原生
  • 原生平台更新和功能将等待框架更新
  • 如果您需要扩展,在大多数情况下可能会很痛苦

在我的公司,我们创建了一个框架,允许开发共享业务逻辑的混合应用程序,并使用通量模式实现。 然而,用户界面完全是原生的。

欲了解更多信息,请访问https://github.com/bfortunato/aj-framework 它是完全开源的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多