Tauri:下一代桌面应用开发框架?( 二 )


一个你或许不知道的冷知识,macOS的系统设置页面是Webview+React写的[1]

Tauri:下一代桌面应用开发框架?

文章插图
 
提到跨平台,就不得不提Web生态了,Web相关的技术在跨平台中永远是最受青睐的选择,无论是开发的便捷程度,还是庞大的JS开发者生态等等因素,都使得Web技术无论是在移动端还是桌面端的跨平台应用开发上都稳坐使用率最高的技术栈 。
  • 优点
    • 开发成本比原生低,可以方便做到一套代码在不同操作系统上运行
    • 实现复杂的UI和动效方便,可以更快地实现一些比较炫酷的UI界面
  • 缺点
    • 调用系统原生API不方便通常需要使用打包其他的运行时环境或JSBridge的方式来进行调用
 
ElectronElectron(原名为Atom Shell)是GitHub开发的一个开源框架,最初用来开发Atom编辑器 。它通过使用Node.js(作为后端)和Chromium的渲染引擎(作为前端)完成跨平台的桌面GUI应用程序的开发 。
  • 代表应用:VSCode(303M)、Figma(213M)、Bilibili(397M)、Discord(367M)、QQ Beta(747M)、1Password8(343M)、MS Teams(264M,根据参考文献[2],微软正在替换Electron的实现,但目前看我电脑中下载的版本解包中,依然还有Electron.framework的文件)
  • 优点
    • 开发方便,技术栈适合前端同学(UI使用Web技术,系统API交互部分使用NodeJS)
  • 缺点
    • 打包体积大,需要打包Chromium和NodeJS的运行时环境
    • 内存消耗大:Chromium本身比较吃内存,同时NodeJS是JIT运行的,相比较C++等AOT的语言来说内存消耗也更大 。

Tauri:下一代桌面应用开发框架?

文章插图
 

Tauri:下一代桌面应用开发框架?

文章插图
 
  • 性能需要多花点时间优化
实际上,并不代表Electron技术开发的应用性能就一定不如其他技术栈,总的来说,具体的性能表现还是取决于开发者的投入,例如微软在VSCode的博客中给到了一个例子,能够将VSCode在渲染括号颜色匹配的速度提高10000倍[3] 。 
  
CEF(Chromium%20Embedded%20Framework) 由于需要将Chromium和NodeJS的运行时打包进去,所以Electron构建应用的体积都会非常大,但是CEF的存在解决了Electron的这个问题(实际上,CEF出现的时间比Electron早多了) 。由于Chromium里面有许多第三方组件(如ffmpeg等),在开发应用的过程中,我们通常不会使用到Chromium的全部能力,因此CEF提供了一个轻量级的嵌入式Chromium,同时还可以根据自己的需求进行裁剪 。 
CEF提供了将Chromium嵌入到应用中,展示Webview的能力,同时也提供了C++的一些API,在需要做一些浏览器无法实现的原生API依赖的功能时(如系统文件读写等),则需要使用C++(或其他语言,但是CEF的原生接口是C++的)来编写相关的能力,并提供JSBridge给前端代码进行调用 。 
  • 代表应用:网易云音乐、Spotify、飞书等
  
自渲染技术栈 要实现跨平台的GUI应用,比较流行的的方式是实现自渲染的管线 。上层通过提供类Canvas的绘制、渲染和排版能力,下层使用OpenGL/Vulkan/Metal等图形API进行绘制 。在Web的跨平台桌面应用开发技术栈发展之前,许多应用开发框架都采用了类似的思路去实现跨平台的应用开发,如QT(C++语言)、Flutter(Dart语言,基于Skia渲染)和Swing(Java语言)等 。相比于Electron和CEF的方案,由于不需要打包运行时环境(Swing除外,需要打包JRE)和减少了Bridge转换,所以体积和运行效率通常会优于Web技术栈 。 
  • 优点
    • 自绘性能通常会优于Web跨平台技术(具体还是取决于框架实现)
    缺点
    • 开发成本略高于Web技术栈 实现复杂效果的能力不如原生和Web技术栈,通常情况下需要写更多复杂的代码(取决于具体框架的设计,这一点Flutter做得比较好)
  
Qt(C++) Qt(/?kju?t/)是一个跨平台的C++应用程序开发框架,广泛用于开发GUI程序,在工业、嵌入式等领域的桌面程序中有着非常深入的使用 。