选择桌面+移动应用程序的技术堆栈

2024-01-09

我目前正在浏览网络以获取信息,目标是构建经典棋盘游戏的网络和移动版本。

我们的想法是在桌面版本上拥有完整的功能和游戏,以及与之配套的精简的本机移动应用程序,这将允许用户玩游戏并更改一些设置。

现在我已经习惯了为桌面构建 Web 应用程序,但我从未接触过像 Cordova / Ionic 这样的东西。

我还想补充一点,我确实打算有一天将该应用程序投入生产。

我有多个问题:

  • 您会使用什么服务器端技术? (我正在寻找 Node.js,是支持还是反对?
  • Cordova / Ionic / React Native 和/或其他应用程序如何与我的桌面应用程序相关?它们是独立的项目吗?有什么方法可以 重用代码块? (CSS,JS)?
  • 您个人会使用上述哪些平台?为什么?

我试图从使用过上述任何技术的任何人那里收集尽可能多的信息,因此请随意只回答这篇文章的部分内容,以便我可以编译所有内容。

非常感谢您的时间和帮助


反应本机

一次学习,随处书写。

这确实是本机应用程序,因此它们通常比非本机应用程序具有更好的性能。 要构建 React Native 应用程序,您仍然需要了解目标平台 (Android/iOS),并且仍然需要为每个平台编写一个应用程序,但您可以在两个平台上使用相同的应用程序架构 (React/Flux)。

由于它是用 JS 编写的(如 React),您仍然可以在平台之间共享代码,但有些代码总是必须不同,因为您在应用程序中使用的 ReactElementrender函数实际上是特定于平台的。因此,基本上您可以共享所有状态管理逻辑,但您必须为您的目标平台提供自定义渲染函数。

如果您需要良好/本机性能,并且有时间学习 iOS 和 Android 平台并并行维护 2 个不同的应用程序,那么这是一个不错的选择。

目前 Android 版 React Native 尚未发布,但可能会在 2015 年 8 月发布。它是常规原生应用程序的一个很好的替代品,并提供了一些优点,如热重载,但它仍然不是一项非常成熟的技术,有一点风险,但从长远来看非常有前途,并且经过了 Facebook 和社区的考验。

您还可以看看组件套件 https://github.com/facebook/componentkit同样来自 Facebook,这在某种程度上是针对 ObjectiveC 的 React,但我认为大多数新的 Facebook 项目将倾向于使用 React Native 而不是 ComponentKit。

Cordova / WebView 应用程序

一次编写,随处运行

Cordova/Phonegap 应用程序不是本机应用程序。它们是围绕 WebView 应用程序的本机 shell。 Webview 是在本机应用程序内运行的浏览器。这些应用程序打包在本机 shell 中,以便像其他本机应用程序一样可供 Google/Apple 应用程序商店使用。

优点是它只有 HTML、JS 和 CSS。 这意味着,如果您已经拥有一个移动网站(或一个同时处理桌面和移动屏幕的响应式桌面网站),您可以轻松地将其打包为 Cordova 应用程序并通过应用程序商店提供。

因此,您编写一次移动网站,就可以免费获得 iOS 和 Android 应用程序!

如果您只是想要仍然非常可接受的性能,您希望您的应用程序尽快在大多数平台上可用,并且您没有时间/资源来并行开发多个应用程序,那么这是一个不错的选择。

如果您已经了解 Web 开发,它也会有所帮助:)并且您仍然可以通过 Cordova 插件轻松使用本机应用程序功能(如相机)。

AngularJS(Ionic、Famo.us)与 ReactJS(Reapp、TouchstoneJS)

Ionic 和 Famo.us 是主要在 AngularJS 之上使用的移动框架

Reapp 和 TouchstoneJS 是基于 ReactJS 的移动框架

这些不是为原生(或 React Native)应用程序设计的,而是为移动网站或 webview 应用程序设计的。选你想要的吧,我也不知道有什么特别的。使用框架不是移动/网络视图应用程序的要求,但您可能需要一些实用程序来处理触摸事件,因为onclick事件通常不足以获得良好的移动体验。

我不会争论 AngularJs 和 ReactJs,但两者都经历过并且更喜欢 ReactJS(而且我并不孤单)。如果使用正确,ReactJS 会更加实用、优雅并且易于推理。我认为 AngularJs 不允许优雅的热重装和时间旅行 ala Bret Victor https://www.youtube.com/watch?v=xsSnOQynTHs因为它需要一个不同的架构 https://stackoverflow.com/a/31388262/82609ReactJS 支持。

然而 AngularJS 仍然允许构建东西,并且 Famo.us/Ionic 可能比现有的 ReactJS 移动框架更成熟。

Backend

我建议你使用 NodeJS,因为它允许你构建同构/通用应用程序,这意味着你可以在客户端/服务器上共享代码,包括 React 组件,以便你可以在客户端和服务器上渲染。这意味着您可以直接提供内容,而不是空的 html 页面,这样可以更快地提供内容,更容易为搜索引擎建立索引,并且也适用于禁用 js 的浏览器。

这很奇怪,因为我什至不喜欢 Javascript(我喜欢 Scala、Haskell 或 Clojure 等语言)。如果是这种情况,您仍然可以探索同构应用程序的其他选项,例如:

  • 大部分后端采用 X 语言(或微服务?),只有一点 NodeJS 服务用于服务器端渲染。
  • 使用 Nashorn 之类的东西在 JVM 中运行 JS
  • 使用可编译为 Javascript(如 ScalaJS)并可在客户端/服务器上运行的后端语言。

然而,最后两个选项仍然有点不成熟。

我的经验

我们是一家小型初创公司(3 名开发人员),没有人具有任何 iOS/Android 原生经验,并且希望快速获得结果。

我们最初有一个复杂的桌面 ReactJS 网站(SPA)。我们通过 CSS 媒体查询使其响应式。我们添加了自定义触摸事件处理程序以获得更好的移动体验。所以最后我们有了一个可以很好地支持移动/平板电脑/桌面的网站。

我们采用了完全相同的应用程序并将其打包在 Cordova 中,因此现在它也可以在应用程序商店中使用。它效果很好,表演也很容易让人接受。 您可以期待与您的移动网站/cordova 应用程序相同的性能(对于 Android,请检查人行横道项目 https://crosswalk-project.org/)

我们最终得到了一个需要维护的 HTML/JS/CSS ReactJS 响应式 SPA(那些 SPA 仍然很辛苦!)。

我肯定会再次做出相同的选择,即使将来如果我们的团队成长,我们可能会使用 React Native。


编辑2016:就目前而言,如果我要选择使用什么,我会使用 Redux,并使用 ReactJS 来构建桌面和移动网站,使用 ReactNative 来构建移动原生网站。 Redux 非常好,即使不是所有代码都可以在移动应用程序之间共享,Facebook 报告称大部分 https://code.facebook.com/posts/1189117404435352/react-native-for-android-how-we-built-the-first-cross-platform-react-native-app/可以很容易。请注意,明确区分演示组件和容器组件非常重要,这样您就可以在所有应用程序中重用容器组件,并且只提供自定义演示组件。

另请注意,可以在 React Native 应用程序中添加 Web 视图,因此可以逐步将移动 Web 应用程序迁移到本机应用程序(例如,可以首先尝试迁移导航菜单和总体布局)。编辑:也很有趣,Ace https://github.com/Microsoft/ace项目旨在在 Cordova 应用程序中添加一些本机布局。

编辑2017:对于所有移动应用程序开发人员,我们绝对建议尝试 Expo (React Native)。您无需了解任何有关本机应用程序的信息,即可获得 Cordova 的开发速度。如果您已经了解一点 React,您可以在 1 分钟内开始。

还建议将 GraphQL 与 Apollo 结合使用,这将需要更多时间来学习,但对于长期项目维护来说这是一个非常好的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择桌面+移动应用程序的技术堆栈 的相关文章

随机推荐