前言

我的技术栈次要是vue3、go、java等。

前端对界面的表达力是最强的,所以暂不思考原生相干的ui技术,如fyne、QT bind。

而单纯的基于web的跨端计划,尽管能提供一些根本的零碎级操作,但对于自定义的底层需要还是须要go来解决。

我选的技术计划就落在了vue+go上,从原理上分为:

  • 独立UI+websocket+底层Go:electron, tauri
  • Go管制的UI+websocket+底层Go:lorca, webview
  • Go残缺打包的UI+jsBridge:wails

计划比拟

electron

算是web跨端中最具生态和成熟的计划,几年内也陆陆续续用过几次。

但最终也是因为它打包太大、依赖装置常常失败、打包上也遇到不少坑,太过折腾就放弃了。

tauri

https://tauri.studio/en/

底层由rust实现,UI渲染依赖于webview2或webkit,提供js api拜访零碎性能、以及和rust底层交互。

以前端开发为主视角,tauri的相干库搁置于前端工程中的src-tauri文件,对前端我的项目的侵入性较小。

能打包成一个独立的程序,在OSX下测试的成果还不错。

然而在windows下搭建环境时会遇到依赖装置谬误,打包工具是基于node的,过于折腾就先不去解决了(穿插编译的反对也在打算内)。

目前tauri公布了beta版本,go binding的反对还在打算内,所以如果我要以go为底层的话,只能采纳websocket或http的通信形式。

tauri还打算公布android和ios版本,能够期待下。

lorca

https://github.com/zserge/lorca

原理上是从go调用了chrome,而后启动了定制化的chrome界面,所以须要依赖chrome。

这是我用的比拟多的一个,因为间接能够从go来管制启动敞开,加载页面等等。

毛病也很显著,开启利用自身是chrome的一个窗口,所以不能做过多的定制化。和go之间的通信,须要自行用websocket或http。

其兄弟我的项目 github.com/zserge/webview,提供了较多的定制性能,将webview内置。然而在编译打包时还是有一些坑,以及有些性能没找到用法(可能得用c++?),比方全屏。

wails

https://wails.io/

和tauri相似,然而底层为go,而且是以go我的项目的主视角来打包,也是基于webview2或webkit。

目前推出v2版本,临时只反对了windows的打包(在windows中须要webview2环境反对)。

v2的总体应用体验很不错,劣势如下:

  • 能够做到前后端拆散开发,打包时只须要在go中引入前端打包好的dist资源即可。
  • 提供了js和go之间的过程内通信。
  • 打包工具是基于go的,根本能防止基于node打包时依赖装置的“劣根性”。目前在windows中打包运行测试很顺畅。

我认为在go+web这个方向,wails v2 应该是目前最好用并且符合要求的一款。

小劣势就是还在beta中,osx和linux的行将推出。有些浏览器的深度定制没有凋谢进去,比方webview2对不平安资源的拜访权限问题,须要底层反对后开发配置进去,不过好在社区响应及时。

总结

我会继续关注wails和tauri的停顿。

我的项目利用中,将从lorca逐渐迁徙到wails的形式中。