我不太跟踪这些东西,但我明白了。 如果你想要一个适用于 Android 和 iOS 的原生应用,那么只需要编写一次而不是两次 *非常* 不同的语言,这将非常棒。 在不加倍工作量的情况下,将覆盖范围增加一倍。 越来越多的此类东西也正在扩展到桌面,这意味着一个目标可以覆盖三个平台。
类似 PhoneGap 的东西就浮现在脑海。 他们说:“重用现有的 Web 开发技能,快速构建使用 HTML、CSS 和 JavaScript 构建的混合应用。” 对于只需要学习很少新东西的 Web 开发人员来说,这显然很有吸引力。 我的大脑更倾向于,“好吧,如果我要用 HTML、CSS 和 JavaScript 编写这个东西,为什么不坚持这样做呢?” 渐进式 Web 应用正在做很棒的事情。 尽管如此,我还是很好奇 PhoneGap 的旗舰应用是什么。 我是否使用了任何很棒的应用,却不自知?
如果您要叠加一个框架,但仍停留在 JavaScript 领域,我认为最大的玩家是 React Native。 我听说它现在几乎总是与 Expo 一起使用,后者似乎有一个功能可以帮助 React Native 在 Web 上运行。 此外,还有专门用于 Web 的 React Native for Web。
在 React 领域,还有一个新的玩家:Ionic React。 它一开始就针对所有三个平台(iOS、Android 和桌面)。 Ionic 并不新鲜——它一直是一个使用 JavaScript(或者在 Angular 中可选)执行此操作的框架,并且似乎很快就会支持 Vue。 很吸引人。 Nader Dabit 有 一篇关于第一印象的博客文章,写得相当不错。
这一切开始让我感到困惑,因为似乎 Ionic 最终在幕后使用的是 Cordova……就像 PhoneGap 一样? 还是什么? 但现在 Ionic 正 转向自己的东西? 我想,有一些低级解释器可以将 Web 原语转换为原生原语,人们可以在此基础上构建开发工具,这是有道理的。
谷歌也参与了这场游戏,推出了 Flutter。 Flutter 旨在覆盖所有三个目标,并帮助您构建 UI。 Material Design、动画和性能都是一等公民。 不过,它都是用 Dart 编写的。 Dart *可以* 编译成 JavaScript(因此可以用于 Web 内容),但它也可以编译成机器代码。 我想,当 Flutter 应用成为原生应用时,它们以这种方式编译是为了获得额外的性能。 我不太了解 Dart 的流行程度,但我想,如果能够在所有三个平台上获得出色的性能,Web 开发人员真的不会在意他们用什么语言编写。
在我能力范围之外的是 Xamarin,这是微软对统一多个平台上的开发的看法。 此处涉及的语言是 .NET 和 C#。 它具有与其他所有东西相同的承诺:用它构建,它可以在任何地方运行! 这是为了方便开发者! 它速度很快,您将用它创造出惊人的东西!
我总是对所有这些东西持两种心态。 我的一部分羡慕着真正漂亮的原生应用。 我手机上最喜欢的应用大多感觉非常原生,尽管我不确定自己是否能分辨出是哪个框架创建了它们,如果有的话。 例如,我手机上有一个 Dribbble 应用,我非常喜欢它。 它简单而美观。 我打开它,就已经登录了,而当我打开 Web 应用时,通常并非如此。 它感觉很快,并且具有您期望从原生应用获得的所有页面内动画内容。 我真的希望我们为 CodePen 也有这样的应用。 也许如果我们今天从头开始,我们会用一些跨平台框架来编写它,该框架可以针对所有三个平台,并可能为我们带来一些酷炫的竞争优势。 我的一部分则像,哦,我故意成为一个 Web 开发者。 我认为开放的原生 Web 是最佳去处,并且具有最长的寿命。 一个能够很好地服务于此目的代码库,将是随着时间的推移最不后悔的。
昨天我在收集材料,准备一个关于 Service Workers 的演讲。 我自然而然地打开了 Codepen,看看它是否有一个,因为如果有的话,那就太棒了。
我曾经羡慕原生应用,但现在我实际上感到很荣幸,因为有了 JavaScript 知识,我可以使用所有这些工具,只用 JavaScript 就可以在所有平台上构建应用,因为我们实际上比原生构建的应用获得了更多价值,因为我们可以构建一个代码库,并在所有平台上运行它。 效率,不重复。 这难道不是代码的本质吗?
我刚刚开始使用 Electron,它可以让你用 JavaScript 构建跨平台的桌面应用,我对结果感到欣喜若狂。 特别是在我发现 Slack 和 Skype 也是使用 Electron 构建的 JavaScript 应用之后。 我们用 JavaScript 构建了一个 Mac OS 应用。 现在,我可以看到我们构建的应用和 Slack 之间的相似之处。
现在,我已经更多地涉足了这个领域,我真心觉得,这应该成为理想的编码方式。 一个代码库分布在多个平台上,实际上是最有效的方法。 这让 JavaScript 在可移植性和多功能性方面再次成为王者。 我喜欢能够仅使用 JavaScript 在 Mac OS 和 Windows 上发布原生产品。
说实话,我认为以这种方式进行开发可以让您作为开发人员更多地关注如何使应用直观、易于访问和用户友好,而不必过分关注技术方面。 应用并非因为它是原生的而变得优秀。 有很多用平台原生语言编写的垃圾应用。 应用的优劣取决于你如何构建它。
在我看来,这些平台本身应该认真考虑为开发人员创建一个使用 JavaScript 进行构建的方式,而无需借助框架。
当然,您可能需要根据需要多少功能来决定是否要原生开发,但很多事情可以用 JavaScript 做到。 我非常感谢这些扩展了 JavaScript 覆盖范围的框架。
您忘了提到 https://www.nativescript.org/,它也很有前途。 但就目前而言,我认为 Flutter 是最有前途的框架。
这绝对是一个复杂的领域! 这是我的解释(我知道我对其中一些内容进行了过度简化)。
据我所知,Ionic 在幕后使用 Cordova,无论您使用的是 Angular 还是 React。 他们正在构建自己的类似 Cordova 的解决方案,称为 Capacitor,但据我最后一次回忆,这不是他们默认使用的方案 https://capacitor.ionicframework.com/。 这里的关键区别在于,这些解决方案(称为混合应用)都在 WebView 中渲染。 这意味着您可以使用 HTML/CSS 构建 UI,这很棒,但也存在一些限制和性能问题。
另一方面,还有 React Native 和 NativeScript 等工具。 这些工具实际上在 iOS 和 Android 上渲染原生 UI,但在幕后,它们使用打包在 JavaScript VM 中运行的 JavaScript 来执行所有业务逻辑。 优势在于原生 UI 控件和比混合应用更好的性能,但缺点是学习曲线更陡峭,您必须学习不同的 UI HTML/CSS。 框架之间主要区别在于框架本身——React for React Native,以及 Angular、Vue 或 NativeScript 的无框架。
Xamarin 和 Flutter 属于不同的类别,据我所知,它们都是交叉编译的。 Xamarin 将 .NET 转换为原生 iOS 和 Android。 Flutter 做同样的事情,但使用的是 Dart。 这里的优势在于,对于 Xamarin 来说,您可以使用已经熟悉的语言,而对于两者来说,您可以获得真正的原生性能和 UI,因为最终代码是原生的。
为了完全透明,我曾经在 Progress 工作,该公司是 NativeScript 背后的公司,但我相信这是一份公正的概述。 此外,我还参与了 Mobile Dev Weekly 的共同编辑工作,我们在那里涵盖了这些内容 https://mobiledevweekly.com/
希望对您有所帮助。
是的,这很有帮助 :)
Flutter 不是交叉编译的,它只是使用 Skia 绘图引擎从头开始绘制所有与 UI 相关的元素,无论是在 Android 还是 iOS 上。
感谢 @Omar。 我的错误。
对我来说,这感觉像一个不切实际的幻想。
Web 有应用中没有的难题,例如语义、DOM 树的可访问性问题等等。
我不认为有任何软件能够解决我们在 Web 上使用的所有隐藏文本、跳过链接、标签顺序导航问题,同时还能使其在原生应用环境中正常工作……
嗨,Chris,如果你在听众中有企业开发人员,他们可能会对像 Xamarin、Telerik、Alpha、Kony 这样的平台的深入探讨感兴趣。如今,越来越多的移动应用程序是为企业运营而构建的,甚至最终用户也使用企业平台来实现常见的开发人员体验。
https://www.outsystems.com/blog/posts/enterprise-cross-platform-mobile-app-development-tools-compared/
为了完全透明,我为 OutSystems 工作,但不为 Stanley 或 Gartner,他们有 1,000 多名客户进行同行评审,其中提供了一些链接,因此它可能对其他人有所帮助 :)
Chris,你用“我认为原生开放网络是最佳选择,并且具有最长的生命周期。一个能很好地服务于此的代码库将是随着时间的推移最不令人遗憾的。”
Ionic 100% 专注于开放网络:选择你喜欢的 JavaScript 框架(或原始框架!),立即开始使用我们的 UI 组件。当你准备好将应用程序部署到移动设备、桌面和其他平台时,可以使用 Capacitor,我们的现代原生应用程序运行时。Ionic 应用程序是 Web 应用程序 - 没有什么自定义或专有的内容需要学习,这意味着 Web 开发人员可以轻松上手并坚持使用我们 - 知道这些技能将在未来很长一段时间内为他们服务。
(免责声明:我为 Ionic 工作。)
嘿 Chris,我相信 Untappd 是 Cordova/Ionic 应用程序的最佳示例。
Untappd 最初是使用 Cordova 构建的,没有 Ionic 作为 UI。在某个时候,他们开始使用 Ionic 作为 UI(虽然它一直使用 Cordova)。我认为他们现在可能正在转向 React Native。
我更喜欢 Web,并且拥有大约 7 年的 Cordova 经验和几年的 React Native 经验。
我认为苹果公司故意阻止了移动 Web 体验的发展,以便他们可以利用 App Store 和他们自己控制的生态系统。如果我们可以在浏览器中获得推送通知和触控/面部 ID 支持,那么大多数混合应用程序实际上就不再需要了。
长话短说,我认为 Web 将获胜。