跨平台桌面应用开发的五大框架-Electron-的比较-Flutter-Tauri (跨平台桌面应用开发框架)
跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上,开发者需要为每个操作系统编写不同的代码,使用不同的开发工具和语言。而跨平台桌面应用开发框架通过抽象底层操作系统的差异,提供一套统一的API和工具,使开发者能够在一个代码库中编写应用程序,并将其部署到多个平台上。
跨平台桌面应用开发框架可以分为两种类型:
- 使用Web技术(HTML、CSS和JavaScript)构建应用程序的框架
- 使用原生代码(C++、Java、Python)构建应用程序的框架
跨平台桌面应用开发框架可以提高开发效率,减少重复开发工作,并且可以让应用程序更快地部署到多个操作系统上。选择适合的跨平台桌面应用开发框架应该考虑项目需求、目标操作系统、开发经验和性能要求等因素。
五大跨平台桌面开发框架
目前市面上有许多流行的跨平台桌面应用开发框架,以下是五种最受欢迎的框架:
Electron
Electron是一个开源的跨平台桌面应用程序开发框架,由开发和维护。它基于Chromium和Node.js,使用Web技术(HTML、CSS和JavaScript)来构建应用程序。Electron可以将Web应用程序打包成桌面应用程序,并支持在、和等多个平台上运行。它提供了丰富的API和工具,可以访问底层操作系统的功能,如文件系统、网络、窗口管理等。Electron适用于具有复杂交互和跨平台需求的桌面应用程序。
wxPython
wxPython是一个基于Python的跨平台图形用户界面(GUI)开发框架,它使用了wxWidgets库。wxPython提供了丰富的GUI控件和功能,可以创建具有各种样式和布局的应用程序。它支持Windows、Mac和Linux等多个平台,并提供了与底层操作系统交互的API。wxPython使用Python语言编写,易于学习和使用,适合快速开发桌面应用程序。
FinClip
FinClip是一个基于Flutter的跨平台应用容器,它可以将Flutter应用嵌入到其他应用中运行。FinClip提供了一套丰富的API和功能,可以与宿主应用进行交互,如获取设备信息、调用原生功能等。它支持和平台,并提供了一套可视化的开发工具,方便开发者进行应用的调试和测试。FinClip适用于需要将Flutter应用嵌入到其他应用中的场景,如金融、电商等行业。
Tauri
Tauri是一个用于构建跨平台原生应用程序的开源工具和框架。它使用Web技术(HTML、CSS和JavaScript)来构建应用程序界面,同时使用语言来编写底层框架和与操作系统交互的代码。Tauri可以将应用程序打包成可执行文件,并支持在Windows、Mac和Linux等多个平台上运行。它提供了丰富的API和工具,可以访问底层操作系统的功能,如文件系统、网络、窗口管理等。Tauri适用于需要使用Web技术构建跨平台原生应用程序的场景。
Flutter
Flutter是一个由开发的跨平台移动应用程序开发框架。它使用Dart语言编写,通过一套统一的UI框架可以在Android和iOS等多个平台上构建高性能、美观的应用程序。Flutter提供了丰富的UI控件和功能,支持响应式编程模式,具有热重载和快速开发的特点。Flutter的应用程序使用Skia引擎进行渲染,并直接运行在操作系统的图形引擎上,不依赖于WebView或浏览器。Flutter适用于需要快速构建跨平台移动应用程序的场景。
五大框架的共同点和不同点
共同点:
- 都可以创建跨平台桌面应用程序
- 提供统一的API和工具
- 提高开发效率和可移植性
不同点:
- 使用的技术和语言不同
- 提供的功能和特性不同
- 适用的场景不同
桌面端开发都用什么语言,简单分析下这些语言的优劣势对比?
目前,最优的选择有四个: 1.如果只在win下使用, form是不二选择,可谓是又快又好,企业应用或定制开发都是相当好的,初学者也可以入手。 ,跨平台。 需要会前端,必须熟悉js、css和html。 属于前端人员大杀器,如果是初学者,需要一下子学三样东西,再加上electron的进程间通信,可能会被搞懵。 3. qt5,可以使用qml(js语法)进行UI编程,但是需要懂c艹,但是写软件相当快,还可以写安卓、ios、Linux、嵌入式中的应用。 ,刚刚正式支持win平台的软件开发。 谷歌出的这个东西,适合没有基础的初学者,因为是一个全新的体系,全新的语言,写ios、安卓非常高效,之后还会兼容h5。 如果是初学者可以跟着走,值得尝试。 但是新东西总有一些坑。 正式项目跨平台建议electron或qt,只用win平台强烈建议微软自己的net。 个人技术尝试建议flutter。 桌面端开发跨平台的,如果你是轻量级的项目,那么我推荐你用electron, 目前使用Electron来开发的桌面应用非常多,我们最熟悉的比如Atom,VScode等等。 而且在github上也能找到许多应用使用了electron。 electron是Node,Chromium,html,css,js的结合框架,这就需要你有一定的前端基础。 其实只需要了解一下electron的API就行了,其他的就像你在做web是一样的。 这种方式最大的缺点就是性能,还有透明窗口也有问题。 所以在做需要性能方面占有很大成分的项目时,并不推荐使用这个方式。 那么其他的,就是最近几年使用比较多的windows directui框架,但它不是跨平台的。 那么就引出了qt,作为c++跨平台的界面框架,这个上手的话,我觉得对一般人是有难度的,因为首先需要扎实的c++功底,其次你要熟悉控件的制作原理,因为有时候你需要定制自己的UI控件。 它现在在嵌入式,军工领域非常受欢迎。 但是整个库非常臃肿庞大,而且开发界面的效率也非常低。 如果来做互联网项目,迭代更新的速度根本就跟不上。 目前都只有大公司会采用,像maya这种生产力型的应用很多是qt做的。 还有一种是直接使用Cef加js,比如网易云音乐,就是这么搞的,但是很多和系统平台的交互接口你需要重写,等于是需要自己造轮子。 工作量大,目前没有适合的框架给你套用,也需要扎实的c++功底。 其实pc端的应用基本也就windows会火一些,再加一个macos,那么选择qt应该会很好一点,毕竟你自己造一个跨平台的框架,太费时。 总之,做跨平台就意味着,不可能做到既有效率又完美的实现各种功能,许多都要自己摸索。 win桌面端直接上visual studio啊!然后你熟悉什么语言?,c#,c++都有相应的win桌面工具。 直接用就好了,非常好用 编程语言这种东西无所谓,只要能用啥都可以。 主要看你老板需要和你会用什么语言。 比如 我用AS编安卓程序,当然用JAVA。 不过我后台最开始用ASP和来做,现在换PHP了。 桌面端用QT或者VB做。 涉及单片机部分控制也用C。 现在做跨平台的了 开始以QT为主了。 只要能达到目的啥都可以。 学会1-2种 换其他的也不是很难。 对初学者来建议学C起步吧。 精通一门,重新学个语言入门也就1个月的事。 PC桌面程序,如果简单一点的,用pyqt5+python的开发难度和周期都比较现实一点 会C++ 用Qt5非常不错写代码效率很高 会js 用atom使用的那个框架 会Python用PyQt写代码很快 会java用JavaFX 看语言咯 还可以用delphi,其firemonkey框架发布8年时间,支持跨平台:win,安卓,ios,macos,linux,后续支持webassembly,界面是控件拖拽布局所见即所得,开发效率较高。 编译生成的是机器码,编译速度快,调试方便,其生成机器码运行效率较高,支持x86,arm的32位64位处理器。 支持跨平台3D界面,蓝牙通讯,定位,重力,摄像等,支持多种SQL,NoSQL数据库。 单个开发工具实现前后端开发,跨平台开发。 适合个人和小公司用一套工具实现大部分开发需求。 主要有以下几种技术 ### Duilib #### 简述 Duilib是在Windows平台上使用最广泛的类库,使用C++和XML混合编程,国内很多计算机企业都喜欢使用这个类库,可能是由于他的技术许可比较宽泛的原因。 适合于界面比较简单的软件,视觉特效丰富,局限于Windows的平台。 例子:360电脑管家。 #### 优势 #### 劣势 ### Gtk、Qt或WxWidget: #### 简述 三种基本可以做到跨平台的技术,使用C/C++开发,使用者广泛。 其中WxWidget使用了API嫁接方式,Qt和Gtk(包括各种绑定技术)使用自绘技术。 结构严谨,软件可以做的很大很复杂。 例子:WPS和Maya。 #### 优势 #### 劣势 ### Electron: #### 简介 使用Web技术开发桌面软件,基于Chromium(Chrome)引擎,使用JS编程语言,绝大多数使用者都是原来的网页开发者。 绝大多数都是爱好者使用,处于“勉强可用”的地步。 适合大面积静态展示型软件使用。 例子:网易云音乐。 #### 优势 #### 劣势 ### QtQuick(QML) #### 简述 Qt公司开发的一款基于OpenGL的图形类库,有显卡加速,类似于Duilib。 采用了C++与QML混合编程。 QML类似于JavaScript语言。 QtQuick下一个版本在Qt 6上更加强大,业界期待已久。 #### 优势 #### 劣势### Atk、Swing或JavaFX 使用Java语言开发软件,有JDK加持业界积累的众多Java类库支持。 有不输于VS的IDEA加持,本应该更棒,只是现在已经式微了。 绝大多数使用者都是企业开发(不追求界面美观)、爱好者(开发顺手)。 ### WinForm、WPF或Xamarin: 使用C#开发,WinForm和WPF局限于Windows平台。 有VisualStudio加持使用很爽。 ### Flutter: 使用Dart语言,新类库,bug可能会很多。 ### SwiftUI或Cocoa: 苹果平台原生界面技术,macOS平台内建支持,不是macOS专用软件不推荐。 ### Win32: 经典Windows 平台API,绝大多数只有一些老软件还在使用,不是维护老软件不推荐。 winform,不二选择 webview2,作为一个浏览器控件嵌入在桌面应用中,支持 core和 framework
跨平台桌面开发,Electron还是WebView2 (中篇)
这一周继续聊跨平台桌面开发这个事情。
在这篇文章中,我暂时会放下Electron与WebView2的一个对比,而聊一聊跨平台这个对于程序员群体来说不陌生的词。
一个趋势是:跨平台开发几乎是在各个技术方向都会持续发展的
跨平台这个词,对于程序员来说,应该是不陌生的。因为这个概念不只在某一端存在,后端,前端,移动端,桌面端几乎所有方向都对跨平台有需求。
在后端,Java是跨平台的,当你用Java来编写后端服务时,并不需要考虑操作系统,因为它几乎支持主流的操作系统。现在,编写一个后端服务,选用Java仍是主流。虽然可能它的跨平台特性已经不是程序员最在意的点了。
而在移动端,类似React Native,Flutter也是非常有名的跨平台移动开发,它们与移动原生开发方式之间一直是竞争与共存。
而前端因为依托于浏览器,天然就是跨平台的。事实上,很多应用或服务早期纷纷选择从原生应用迁移至前端WEB方式的一个非常重要的原因就在于它是跨平台的。
桌面操作系统很长一段时间一直是Windows一家独大,所以桌面开发一直是Windows独占,直至现在为止,很多专业级的软件仍然是Windows独占的。
而Linux桌面操作系统与MacOS桌面操作系统,早些年几乎可以忽略不计,压根不需要考虑这两种系统。但随着近些年它们的慢慢流行,特别是苹果的MacOS的以其杰出的工艺,流畅的体验,叠加苹果手机的流行,其市场份额增长非常之快,在特定的诸如编程,设计等行业人群中使用范围较广,这使得开发支持MacOS系统这个点变得越来越重要。
所以,在桌面开发领域,跨平台的需求也越来越高。
这也是Electron及早期的能迅速发展起来并得到非常广应用的原因所在。
无论是哪一端,跨平台技术之所以频繁出现与不断发展,其根本原因就在于编程的一个重要痛点在于:
为了让同一个服务能在所有设备上运行,程序员不得不编写与维护非常多不同版本的程序
每一个程序或软件后面的服务,都有一个非常迫切的需求,就是期望它的用户无论何时,无论何地,无论使用任何设备,都能方便友好的使用这个服务。
也是因为这个原因,Web发展起来了,因为Web的优势就在这,只要你的设备上有浏览器,就能访问。
但Web毕竟性能有限,且浏览器这种形式并不利于用户忠诚度的培养,它存在天然的弱点。一些简单的操作服务使用Web并无问题,但稍微有点要求的,Web可能就并不是非常适合。
所以,一种趋势不可避免地流行起来:
对不同设备或系统进行抽象,基于某一种特定的编程语言,编写出能与原生程序相媲美的,又能跨平台的技术便层出不穷了
对吧,Java是使用JVM来抽象不同的操作系统,React Native则是使用虚拟DOM以及转换成原生控件的方式来实现跨平台,而Electron则是通过性能较好的Chrome内核+NodeJS原生调用能力的搭配来实现跨平台桌面开发。
总而言之,这种跨平台的技术不会消亡,只会有新的技术层出不穷,而它们与原生开发一定是相互竞争,配合与共存的。相互之间无法取代。
那再回到跨平台技术上来说,一个良好的跨平台开发的技术或框架,重点是什么。
或者换种方式说,哪些特性使得它更易于流行起来?
我个人认为有以下的几个点:
跨平台开发技术能不能流行起来的一个非常重要的点就在于,使用了什么样的编程语言。
以移动端跨平台开发技术来说明,一个React Native,一个Flutter,这两个是比较知名主流的跨平台移动开发技术。React Native使用的是前端React技术,而Flutter则是Google的D语言。
显而易见的是,虽然Flutter是使用skia引擎在底层重绘一套UI,其性能相比React Native这种模式更佳,但React Native更易于被接受。
在流行度上,React Native始终比Flutter更流行,一个最重要的原因也在于:
使用已熟知的前端编程语言,比起重新学习一个D语言更易于被接受,维护成本更可控。
这个问题在跨平台桌面开发中也是类似,跨平台桌面开发技术也不是Electron最开始出现,比如著名的QT很早就有了,但比起Electron这种使用前端编程技术来说,显然在编程语言的门槛上和程序员群体上都存在困难,这也是Electron能后来居上的原因所在。
因为,大多数程序员群体,相比较另外学习一门什么语言去做什么,使用自己熟悉的语言来做什么是更容易,意愿也更高。
而从公司或团队的考量上看,选择偏门的小众语言存在成本上的顾虑,比如人员招聘是否容易?
跨平台技术在尝试解决不同平台不一致,它或多或少会损耗性能。这也决定了几乎没有任何一个跨平台技术能取代原生开发。
这是一个取舍的问题,对于一个程序来说,究竟性能有多重要。对于比较看重性能的程序来说,原生开发可能是最优选择。
但跨平台的性能损耗也有高低之分,并不在同一水平线上。
其实,无论是Electron,或是WebView2,都是基于浏览器内核+前端技术的跨平台桌面解决方案,这也是为什么要把它们放在一起聊的原因。
Electron是先行者(当然,严格说来,出现的更早,但今天它的流行度已远远落后于Electron了),而WebView2则是后来者。
那做为后来者的WebView2究竟做了哪些改进?它又有多大的能力来挑战Electron呢?
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。