还是放弃了用 JavaScript 写桌面应用

2019-04-26 10:58:26 +08:00
 xcodebuild

前些天开发了一个 macOS 应用来解决窗口切换麻烦的问题: https://www.v2ex.com/t/557042#reply73

Electron

第一个版本是用 Electron 实现的(妄图 JavaScript 一统天下),但是由于这个软件用到了很多 macOS API 必须通过 Objective-C 去调用,只能通过类似 node-ffi 的方式完成。最后调试起来比较蛋疼,而且打包的体积过大。

MacGap

第二个版本(也就是上面的链接里看到的版本)是用 MacGap + Vue 实现的,需要写一些 Objective-C 的代码,同时 OC 和 JavaScript 的交互也变得更容易了(至少我觉得比 node-ffi 好用)。打包的体积也可以接受,只有 2M 多。然而总有用户反馈有各种奇奇怪怪的 bug 以及卡顿。

这里卡顿其实并非 JavaScript 的锅了,虽然 OC 和 JS 的交互理论上会消耗一部分性能,但是更多是因为 Webview 本身渲染就比较低效,窗口切来切去的经常出现残影。

macOS Webview 本身的一些 bug 甚至导致在某些低版本系统上直接 crash,当时用 Vue 画出来的界面长这个样子

把渲染部分重构成 native

最后还是把用 Vue 写的渲染部分用 Objective-C 重构了,顺畅多了。。

结论

所以 JavaScript 仍然不太适合写交互比较频繁的应用(就像窗口切换这种),更适合有跨平台需求的或者对交互性能要求不高的界面。

不得不说用 JavaScript + Vue 写界面本身是比用 Cocoa + OC 写要舒服的多的。。

下载地址

感兴趣的同学可以下载围观: https://github.com/xtab-app/xtab/releases

8414 次点击
所在节点    分享创造
29 条回复
xcodebuild
2019-04-26 13:18:58 +08:00
@frankmdong 既然已经动手了估计是撑不了多久,故意对上传者可见其他人不可见这个设定有点坑人。。
Sapp
2019-04-26 13:41:55 +08:00
我现在在用 electron 写一个标注软件,到目前为止性能我觉得还行,至少可以让我流畅的在一张图上标注几十个对象,而且开发速度快,可以用的库以及 UI 框架多,开发完自带三端适配,如果不需要和原生大量交互,electron 还是可以的。
xcodebuild
2019-04-26 14:02:40 +08:00
@Sapp 嗯应用内的交互性能还是可以的,主要大量原生交互和窗口本身的绘制性能比较坑爹

话说标注软件具体是指什么,公司项目么
ryougifujino
2019-04-26 14:05:03 +08:00
我记得 vscode 就是 electron 写的,不也挺好?
xcodebuild
2019-04-26 14:23:33 +08:00
@ryougifujino 嗯只能说微软牛逼
impl
2019-04-26 18:49:25 +08:00
用 typescript 试试?
flynaj
2019-04-26 19:41:43 +08:00
winxp 就用过 JavaScript,后来的系统也没有用了。
jjjjim
2019-04-27 14:40:17 +08:00
@ryougifujino 看到你的评论我突然想起钢铁侠 1 里的两句台词 😂

- Tony 在一个山洞里用一堆边角料都能做出来
- 很抱歉,我不是 Tony Startk
Dawnki
2019-05-02 17:49:41 +08:00
electron 做一些小工具打个包至少也要 100M 起步..Orz

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/558876

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX