首页 » 软件开发 » 桌面应用的多种跨平台方式(平台微软开发方式桌面)

桌面应用的多种跨平台方式(平台微软开发方式桌面)

少女玫瑰心 2024-07-24 07:27:57 0

扫一扫用手机浏览

文章目录 [+]

「没有最好,只有最适合。

虚拟机(代表JVM、CoreCLR)

Java Virtual Machine

JVM是Java应用运行所依赖的虚拟机,Java宣称的“write once, run anywhere”就是靠JVM实现。
得益于Linux服务器的高市场占有率,众多的Java Web应用被开发出来通过JVM运行在Linux服务器之上,也因此Java程序员的比例非常高,就业最容易。
常见的场景是,Java开发人员在个人电脑(大多是Windows系统)上编程,然后打包部署到Linux服务器。
可能是因为Java的前端框架SWT、Swing等上手不太容易,GUI界面不够美观,所以Java桌面应用是比较少的,虽然也有例如Eclipse这样的明星级应用。

桌面应用的多种跨平台方式(平台微软开发方式桌面) 软件开发
(图片来自网络侵删)

CoreCLR是微软.NET框架的虚拟机,也就是说C#程序依赖它来运行。
微软一开始的跨平台框架叫做.NET Core,后来与.NET Framework大一统发布了.NET 5,2021年发布了.NET 6。
名字确实更简洁了,但微软随意命名的作风一直被人诟病,希望以后不要再改了,像Java一样几十年如一日,现在已经持续发展到Java17了。

值得一提的是,.NET有一个开源版本Mono也是跨平台的,Mono最初由Xamarin公司(前身是Novell公司)开发,2016年被微软收购。
著名的游戏引擎Unity就运行在Mono之上,但是Mono整体上不如.NET强大,C#的很多新特性在.NET上支持得更好,Unity也有意迁移,替换掉Mono。

交叉编译(代表Qt、Flutter)

Flutter

Qt可谓是跨平台的佼佼者,综合考量界面统一美观、稳定性、性能等,Qt是当前桌面跨平台应用开发的不二之选。
Qt通过封装底层操作系统API,交叉编译后生成对应平台的动态链接库(.dll或.so)和静态链接库(.lib或.a),然后打包时将这些库放入安装包内,所以Qt应用的安装包会稍微有点大。

2017年谷歌推出的Flutter也是交叉编译,只不过UI层是通过Skia图像渲染引擎进行自绘渲染,3D方面甚至可通过OpenGL、DirectX等使用到硬件加速功能,界面效果更加炫酷。
Flutter开发使用的是Dart语言,提到Dart又一个小插曲,就是来自于Mozilla的Rust语言,Rust没有GC,防内存泄漏方面却远胜于其他语言,也易上手学习;与Dart相比之下,网络上有人提议为什么不用Rust将Flutter重写,这种提议得到了很多人响应,Flutter+Rust组合确实看起来很美好。
Rust其实也可以跨平台,它有一个框架叫Tauri,有兴趣的条友可自行研究下。

交叉编译是一种很靠谱的方式,但开发环境的搭建往往异常复杂,使用到的开发工具种类多且体积大,总体来说对开发人员的要求较高。

脚本语言执行环境(代表NodeJS、Python)

NodeJS的出现掀起了前端领域的腥风血雨,使JavaScript真正成为了全栈语言,因为NodeJS让JavaScript不仅仅只运行在浏览器中,还可以让它具备访问操作系统API的能力,做很多浏览器不能做的事情。
Electron框架就打包了NodeJS作为运行时环境,以及Chromium浏览器内核,这样极大降低了Web应用改造成桌面应用的成本,微软开发VSCode就是一个强大的Electron跨平台应用,有在线和本地两种形态。
但是,微软似乎对Electron仍不太满意,发布的新版Edge浏览器,使用了一种webview2控件,webview2有独立和嵌入式两种版本,感觉独立版本可以当作JS虚拟机安装到各家操作系统上,以后JS跨平台应用就不用再将Chromium和NodeJS打包进自身安装包内了,这样就大大降低了安装包的体积。

除了Electron,React Native也是JS跨平台阵营的一员大将,尤其是2019年微软推出了React Native for Windows,更是让React Native在PC端也可以大放异彩。
微软真是跨平台领域的模范生,到处都可见它的身影,危机感很浓烈呀......

Python的GUI框架也有很多种,内置的有tkinter,其他框架有wxPython、PyQt5等,但是Python的桌面应用做着玩,做些小应用什么的还可以,大型应用从兼容性、稳定性等方面考虑,不建议使用Python。

脚本语言是边解释边执行,这是一把双刃剑,虽然开发速度快,但是对内存等计算机资源的占用却比较高,Election应用太耗内存这是不争的事实,这跟浏览器打开太多页签会占用过多内存导致卡顿是一样的道理。

总结一下,虚拟机是服务端常用的方式,现代虚拟机也已优化的足够好了,在桌面领域跨平台,Qt是一种潜意识中比较靠谱的方式,如果开发团队实力没问题,Qt往往是首选的方式;Electron是当前比较流行的方式,有很多成功的范例;但是,我个人倾向于webview2这种方式,因为WebAssembly、WebGL这些技术的发展使得Web应用和原生应用的差距越来越小,再加之Web渲染器也能呈现比较美观的界面,开发难度也小,未来与Flutter一较高下也未尝不可。

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读5 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0