1

Nativescript 最基本的特性是它将不同平台的语言和 API:s 转换为 Javascript(或另一种给定的单一语言,例如 C#),例如对于 iPhone,它是 Objective C 语言和 iOS API:s,对于 Android 手机,它是Java 语言和 Android API:s。

Nativescript 的“对 Javascript 代理的构建时反射”是这里的核心。

在线阅读各种“Nativescript vs.whatever”页面,我很清楚这些页面的作者并没有真正讨论那个确切的方面,所以这些文章根本不能用来概述那种情况。

所以我想在这里问你:

有哪些项目可以提供该基本功能 - 从不同的智能手机(可能还有桌面)平台到 Javascript(或另一种单一语言,如 C#)的语言+API 绑定?

所有基于 WebView/HTML 呈现的基于 UI 的解决方案在此处均不合格。只有本机 UI 组件解决方案才有资格。也请随意列出不合格的解决方案,供大家参考,并仔细标出它不合格。

因此,我了解 Apache Cordova ( https://cordova.apache.org/docs/en/latest/guide/overview/ ) 被取消资格。

我更喜欢 Javascript,但是让我们枚举所有项目,与在统一层使用哪种语言无关,因此 Xamarin 在这个线程中是合格的。

同样对于那些各自合格的解决方案,它们是否真的像 Nativescript 一样全面/完整,支持,或者它们如何比较?

对于各自的解决方案,它们是否还提供了一个运行时,将底层不同的 UI API:s 集成到一个跨多个平台的统一 UI API 中?(对于 Xamarin,我理解这个问题的答案是否定的 - 不同平台需要不同的代码。)

他们在方法上的主要区别是什么?

我挑选的一些可能符合条件的名称是“React Native”、“Appcelerator Titanium”和“Electron”(https://electron.atom.io/)。

这个问题对于任何像我这样的应用程序创建者或初创公司都很重要,他们会非常依赖解决方案,也希望能做出很多贡献,所以这是一个长期的选择。

因此,对于我想要的每个相关解决方案: * NAME,URL:它的名称,带有 URL * DISQUALIFIED?:是否不合格 * AUTO-REFLECTION:是否具有自动构建时反射,任何详细信息 * LANGUAGE:统一语言(例如 Javascript ) * 统一的 UI 代码:平台之间的 UI 代码相同 * 平台:支持的平台 * 代码转换:有关如何管理应用程序源代码的任何注释,例如它是否在设备上作为 Javascript 运行,是否适用于 Javascript 代码的任何代码转换 (例如,解析出实际上本身不是有效 Javascript 的自定义标签)、应用于 Javascript 的任何类型的编译等。

请告诉我。

这对于概述非常有价值。

再次感谢 Telerik 和 Nativescript 团队制作了这项出色的技术!

4

1 回答 1

2

移动的:

  • Cordova/PhoneGap/Ionic - https://cordova.apache.org/ - 不合格 - 统一 UI - JS/HTML/CSS - 基本上是一个包装好的 web 视图,能够进行可以从中调用的本机绑定。从某种意义上说,您可以通过您创建的插件访问本机平台。事实上微软有一个项目叫做 Project Ace https://microsoft.github.io/ace/它允许您访问 Cordova/Phonegap 应用程序中的 Native API。应用程序代码在 webview 中运行;并且所有内容都被发送到您构建到应用程序中的操作系统和插件中。尽管有“营销”的说法(离子在这里试图混淆市场真的很糟糕);Cordova/PhoneGap/Ionic 并不是真正的原生应用程序。它可能使用一些本机控件,但引擎在 web 视图中运行。

  • Flutter - https://flutter.io/ - 取消资格 - 统一 UI - Dart - 这是市场上另一个有趣的入口;它是在所有平台上完全编译的代码,因此它比基于 JS 的引擎性能更高。此外,它被编写成一个非常高性能的 UI(UI 的单独线程)。要在平台上访问本机 api,您需要使用已编译的 dart 所期望的接口以及 iOS 或 Android API 创建插件。

  • Fuse - https://www.fusetools.com/ - 取消资格 - 统一 UI - JS - 这是一个有趣的项目;它实际上将标记编译为已编译的代码。我相信 JS 引擎在它自己的线程上运行,而 Fuse 运行时处理 GUI 线程。据我所知,所有 thunking/reflection 都必须通过插件完成。

  • NativeScript - https://www.nativescript.org- 合格 - 统一 UI - JS/XML/CSS - 在两种设备上使用相同的标记语言进行屏幕布局,具有自己的内置系统来编组调用两个平台上的操作系统。访问任何 API 资源不需要额外的插件,iOS 和 Android 上的所有内容都可以通过纯 JavaScript 访问。在应用程序的主线程上运行 Javascript 引擎,如果您让主线程忙,这可能会导致性能问题。由于它的设计,它可以重复使用几乎所有未修改的 Android AAR/JAR 插件和 iOS cocoapod 插件,带来大量的原生控件,这些控件通常只有在使用 ObjC/Swift/Java 时才能使用。它也是唯一一个零日访问新 API 的,因为反射是在运行时解决的。

  • React Native - http://www.reactnative.com/ - 不合格 - 统一 UI - JS - 它也是一个基于 JavaScript 引擎的系统,但它没有内置反射。几乎所有对设备 API 的访问都需要通过已编译的插件来运行,这些插件可以访问本机 API。需要注意的一点是,这个 JS 引擎在自己的线程上运行,而主线程是为 GUI 保留的。这可以使应用程序开箱即用,因为任何阻塞都会在单独的线程上发生,但会使与 GUI 相关的插件更难执行。

  • Xamarin - https://www.xamarin.com/ - 合格 - ??? - C# - 它有一种内置的反射。当他们发布新版本时,他们基本上创建了一个具有当前反射的 thunking 库。因此,当新版本的操作系统出现时,它们必须重新生成 C# thunkings,然后才能使用它。应用程序是在 iOS 上编译的,在 Android 上我相信它使用 Mono 来运行应用程序。所以你不能在 iOS 上运行时做某些事情,比如eval('console.log("hi"); /* even more JS code */')就像在基于 JS 的引擎上一样。

桌面:

  • Electron - https://electron.atom.io/ - 不合格 - 统一 UI - HTML/CSS/JS - 这是一个基于桌面的环境,它合并了节点和 chrome。因此,您可以访问任何 Node api(非常大)和任何 chrome api 并创建应用程序。但是,您需要创建插件的任何较低级别。

  • NW - https://nwjs.io/ - 不合格 - 统一 UI - HTML/CSS/JS - 与 Electron 的注释基本相同。

几点注意事项:

  1. 所有基于 JavaScript 的引擎都不编译代码;它们都在运行时运行 JavaScript 代码。

  2. 您可以使用 Cordova/PhoneGap/ionic 在桌面(使用电子/nw)、网络和移动设备之间轻松共享应用程序。但它仍然是所有平台上的网络应用程序。

  3. 您还可以将 NativeScript 与 Angular 一起使用来创建应用程序,该应用程序在移动、Web 和桌面(电子/nw)应用程序之间共享大约 98% 的代码库。基本上,某些应用程序中的唯一区别只是屏幕布局,因为您需要 Web 的 div/input 标签和移动端的 StackLayout/TextInput。但是其余的代码和逻辑可以是通用的,并且可以正常访问元素。

于 2017-09-26T00:07:01.767 回答