NativeScript 与 Flutter [关闭]
Posted
技术标签:
【中文标题】NativeScript 与 Flutter [关闭]【英文标题】:NativeScript Vs Flutter [closed] 【发布时间】:2019-03-12 17:16:03 【问题描述】:我已经开始研究Native Script with Angular。最好的部分是代码共享技术,我可以将其用于 Web 和移动应用程序。
但我想在这里问的一件事是,Angular 是一个由谷歌开发的框架,谷歌还为原生移动应用程序开发提供了另一个框架,即Flutter
为什么 Google 没有使用 Telerik 通过 Native Script 实现的 Angular 框架。我确信这一定是有原因的。我想了解原因。
如果我可以使用通用技能(即 Angular)开发 Web 和移动应用程序,那么为什么我应该学习/选择像 Flutter 这样的新框架。
我不确定我是否应该问这个问题。如果没有,请帮我找到合适的地方。
【问题讨论】:
flutter.io/docs/resources/… 【参考方案1】:Flutter 不是这里的主要交易,真正的东西是Skia。
skia 是一个 2d 渲染引擎,它允许用户以高性能运行应用程序,这种方式而不是使用 html(chrome web 引擎)或使用原生外观(nativescript)skia 允许我们在每个像素上绘制屏幕,让我们可以在 Flutter 中编写游戏。
Google 在 Flutter Live 2018 中的真正意图是在所有平台之间创建一个连贯的 UI:
桌面 网络(蜂鸟) 移动(颤振)所有这些框架都使用 skia 的 UI 和与操作系统(浏览器、桌面、移动设备)交互的相应框架,因为 skia 是一个渲染引擎,我们控制每个像素,我们可以确保小部件在所有类型的skia框架。
另一方面,nativescript 使用它们在平台上加载的节点引擎,每次我们尝试使用组件时,我们都会调用系统引擎以将组件放置在具有本机外观的屏幕上,这允许我们要直接使用运行 java/swift 的虚拟机的功能,这就是为什么在 nativescript 中可以使用 android.[ANDROID_JAVA_CLASS]
或 ios.[SWIFT_CLASS]
。
nativescript 的主要发明是使用 nodejs 引擎内部的本地类,它们在运行时加载,以执行特定的平台代码。 当您将 nativescript 移动代码转换为 PWA 时,不需要此节点引擎,因为浏览器有自己的引擎,这样我们可以从 PWA 中删除不必要的代码。
注意:nativescript 不是用于移动开发的 Angular 框架,它是用于移动开发的 nodejs 框架,而 Angular/vuejs 只是在 nativescript 核心逻辑之上运行的框架。 这就是为什么如果你愿意,你甚至可以为 nativescript 编写一个反应插件。
【讨论】:
有一个 React-NativeScript github.com/shirakaba/react-nativescript【参考方案2】:在Nativescript中,代码不编译为本机代码,它运行在单独的线程上,将代码与本机组件通信。运行时使您能够使用 javascript 代码调用 Android 和 iOS 框架中的 API。为此,他们使用 JavaScript 虚拟机——Google 的 Android V8 和 WebKit 的 JavaScriptCore 实现,随 iOS 7.0+ 一起发布。而 Flutter 将代码编译为 ARM C/C++ 库,供本机组件使用,因此性能可能更好。
我没有机会比较两者的性能,至于 NativeScript,您使用 Typescript/Javascript 编写代码,而 Dart 用于 Flutter,而我'我对 Dart 很陌生。
NativeScript 是 Angular 也在resources 中列出的开源代码,现在有非常好的 NativeScript 社区。如果您有兴趣列出不同框架的优缺点,here 是一篇非常好的文章。
注意:使用代码编辑器测试 NativeScript 应用程序online 并在您的设备上运行。您可以使用 Angular 或 Pure JavaScript 或 TypeScript 或 Vue.js 风格来构建应用程序。
附带说明:Google 在 2015 年 Dart 开发者峰会上推出了 Flutter,NativeScript 从 2014 年就得到了 Progress 的支持。也许 Google 想为开发者提供其他选项来探索使用其他框架的原生应用程序。
如果您寻找 Flutter 的可用命令,有一个名为 fuchsia_reload 的命令用于重新加载 Google 正在开发的新操作系统 Fuchsia,因此他们可能希望为此提供早期支持。
更新: 如果我们想为 Web 和电话共享相同的代码库,NativeScript 是一个明显的选择。 Angular 和 NativeScript 团队联手创建了 nativescript-schematics,这是一个示意图集合,可让您从单个项目构建 Web 和移动应用程序。
您可以使用安装它
npm i -g @nativescript/schematics
甚至您也可以从现有项目迁移到代码共享项目,如 here 所述。
【讨论】:
【参考方案3】:一) Angular 不是谷歌制作的。
改为
Angular 由一群热衷于让 Web 开发轻松自如的工程师构建而成。我们相信编写漂亮的应用程序应该是快乐和有趣的。我们正在为未来打造一个平台。
来源:https://angular.io/about?group=Angular
b) 这就是它们不断出现和消失的框架的问题。学习并使用一种,直到下一种出现。
【讨论】:
这个答案与 NS 或 Flutter 无关。 :)以上是关于NativeScript 与 Flutter [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 Flutter showModalBottomSheet 开/关动画?
NativeScript:@nativescript/geolocation 与 nativescript-google-maps-sdk
[翻译]Nativescript 中 Web 视图与 Android/IOS 的双向通信
如何将 Apollo 与 NativeScript vue 集成?