对Electron泛滥成灾的替代方案交流

大家都是依托,没什么好说的。Java其实挺不错的,无论是老点的javaFX,还是新的jetpack compose,功能、实用性、高级抽象都挺完善,不完善的地方依靠java本身的包罗万象手搓一点也不是问题。问题在于java的语言设计本来就不适合UI交互系统,很长一段时间java连closure function都没有,那时候人们还真就是一个callback一个annonymous inline class,主打一个把牛马往死里用,这种东西写久了脑子会坏掉的(

国内本科教育、培训体系也难辞其咎。我和在国内读书的同伴聊,就感觉很奇怪,他们好像是一门语言对应一个应用方向,从来不讲某门语言在每个方向的最佳实践。有的大学教授甚至不知道javascript可以拿来写后端,给我气笑了。这样学出来的孩子脑子是会死掉的,因为它没有迁移知识的能力。国内java都是向服务端开发培养的,java UI不行可能也有其原因吧。

拿qt跟java比我甚至感觉是在碰瓷java…举个例子,Qt 6.6 Layout才支持uniformCellSizes,此前人类们都需要在布局计算好后用代码手动调整子组件的大小从而平均分配空间。去年夏天Qt6.7刚出不久,KDE全家桶主线还都在Qt5,恰好卡在我两条腿儿中间,搞得我一整个老人地铁手机.jpg。还有像只支持svg tiny的qtsvg等残废内置库、糟糕的插件生态、CMake + qmake的屎上加屎,就不说什么了。

去年有个搞工程的叔叔看我在写Qt,上来就问我是不是做嵌入式的,因为他就没见别的哪家商业系统会用Qt。嵌入式也危,说是现在国内嵌入式全用安卓了,因为国内安卓劳工太便宜,产业链也成熟,部署Linux省下来的那点板子成本还不够发工资的…

跨平台原生UI大概也就只能保证这些了,甚至有些还不太能保证。就说文字渲染吧,你玩个泰语上标叠叠乐试试呢(笑。还有像恶臭的win32暗黑模式、老掉牙的cocoa UIKit、Tk的“scalable theme”+Linux糟糕的HiDPI支持…基本功能都会被恶心到。to C的企业绝对不会选的。已经不是delphi那个时代了。

原生UI本身是好的,像 .NET、Apple UIKit & SwiftUI,甚至Linux Wayland composer,都是一个赛一个的又快又好看,绝对的业界顶流。问题在于这些先进独特的东西已经跨不了平台了。我们找出了太多的最佳实践,可是——win32、cocoa、X11,我们的共识却止步于此。

Flutter好像没人提,两三年前还挺火的,现在又冷寂下来了。我有个印象很深的姐妹那阵子刚上大学,入坑的dart & flutter,可惜很快就因为癌症离开了。才发现已经过去这么久了。 评价为你要么卡前端的脖子,要么卡后端的脖子,你Flutter & RN是前有控件渲染限制、后有js/dart VM,两头都卡脖子,那对企业来说还不如选择纯浏览器或者OpenGL手绘呢。总得给人点出路吧2333。

这么想一想,Electron确实挺好的啊(呆滞

4 个赞

是的, Electron确实已经很好了, 大部分吐槽 Electron 臃肿的本质是, 不同操作系统底层和API本来就不一样。

你用啥技术去兼容这么多平台都会臃肿。

而很多人喜欢拿着某一个平台的解决方案去和Electron比简洁, 但是这些人哪怕一天都没有真正去处理过跨平台那些棘手的事情。 他们只是为了吐槽而吐槽。

3 个赞

Electron 其实真的算不错了,主要就是内核都打包进去了,其他的就没啥毛病,另外稍微有点慢,但是这个一般都是可以忍受,综合人力成本,生态来说,最优解

没来由的想起flash,曾经也是非常流行的跨平台开发工具, 现在都没人提了,我记忆中的flash程序体积小巧,兼容性强,无需安装,点击即用。 不像现在的应用程序动不动就把浏览器内核等打包进去,体积越来越大

flash也要安装本地支持,先让adobe给你装个adobe版unity,我现在都记得那到处飞的广告……

1 个赞

Tcl/Tk 不算文档不到 10M, SWT 就两兆。

Electron 臃肿这没啥好辩驳的吧。

主要是安装包大,占用内存多。作为程序员心里膈应,但是接触到的普通用户来说,真的没有那么重要。

另外,UI/UX 普遍缺乏优化,但是跟开发效率,跨平台相比,这一点可以妥协,并且日后还可以再改进。对于抢占市场来说,机不可失,效率排第一。

1 个赞

你根本就不关心跨平台,Tcl能干啥?有人用吗?

4 个赞

gitk挺好用的,不过基本没见过其他的了 :sweat_smile: 好像搞嵌入式有不少用的,我之前看到华为一个专门讲tk的教程,好像他们内部一些工具是用tcl写的;感觉这个东西在熟手手里做那种不需要复杂交互的业务逻辑应该不错,支持多线程,体积小

话说fltk有人用吗?我看到有个fltk-rs项目,说了一些选择fltk的好处,轻量、快速、单文件、静态链接不用开源;不过我还没用它写过东西

1 个赞

tcl在电气设计套件里用的挺多的,属于跟大厂绑定那种

1 个赞

被乔布期不肯让 Flash 上 iOS,推广 HTML5 播放器干死的,Android 支持也不行,然后被 Adobe 放弃了

HTML5 取代 Flash 生态以后,就成这样了

只要不是用来在浏览器里看片用,运行 swf 文件的 standalone flashplayer.exe 只要 5MB。

1 个赞

哥,真有人用啊,你可以说它不时髦,不能说它没人用啊,EDA 行业用 Tcl 很多的,而我么,我高频用 gitk 这个工具。。。

and,Tk 是很多人入门 GUI 编程的库吧,Tkinter :grinning:

1 个赞

fltk 是自绘的,如果要选择自绘,那实在太多了,完全没必要用 fltk 这个 「win 3.1 时代」的古董。

不自绘的话,Tk 和 wxwidgets 好多语言有绑定,SWT 是 Eclipse 用的,目测很久都死不了,LCL 是 Lazarus 的,应该也死不了,不过都是非主流😀

1 个赞

“自绘”是指啥呀?自己绘制线和矩形吗?fltk是有常用的widget的;我关注这个是看到它能跨三大平台和android,想着搞点啥玩玩 :sweat_smile:

库自身画 UI 控件,没用 OS 原生的 UI 控件,所以要自行模拟原生外观、字体、输入法、高清屏缩放等麻烦问题,能处理得好的,那代码量少不了,bug 也少不了,好处也有,除了输入法,其它都不受原生 UI 限制。

一些库可以参考下,目前跨平台的 UI 库用自绘方式居多。

Web engine wrapper:

Non-native GUI controls:

Native GUI controls:

  • wxWidgets ****
  • SWT ****
  • Tk ****
  • LCL: https://www.lazarus-ide.org/ ****
  • IUP (not support macOS)
  • Racket GUI library
  • Uno Platform **
  • MAUI(formerly Xamarin.Forms)
1 个赞

学习了,一直以为tk不是原生的

Tk 这么老的东西都有布局管理器,比它晚很多的 VCL 都没有。Tk 在 X11 还在用 motif、 Xt 的时代那绝对是超前的存在,把复杂的 GUI 编程简化成几个命令。

可惜太老了,如今是 web 当道。

安卓上的java不是能编译成本地机器码吗? 如果pc上也能这样, 还是挺不错的. 不过开发效率还是不如electron.

什么时候electron的js和html能被编译成机器码就爽了.

HTML 为啥要被编译成机器码,它可以被用来执行吗?:thinking: