V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xcodebuild
V2EX  ›  分享创造

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

  •  2
     
  •   xcodebuild ·
    xcodebuild · 2019-04-26 10:58:26 +08:00 · 8578 次点击
    这是一个创建于 2038 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前些天开发了一个 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 画出来的界面长这个样子

    img

    把渲染部分重构成 native

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

    img

    结论

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

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

    下载地址

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

    29 条回复    2019-05-02 17:49:41 +08:00
    xcodebuild
        1
    xcodebuild  
    OP
       2019-04-26 11:11:00 +08:00
    微博图床似乎搞成了 refer 识别同时只对上传者可见?
    xcodebuild
        2
    xcodebuild  
    OP
       2019-04-26 11:12:43 +08:00
    DAPTX4869
        3
    DAPTX4869  
       2019-04-26 11:12:54 +08:00
    图全挂...
    xcodebuild
        4
    xcodebuild  
    OP
       2019-04-26 11:14:18 +08:00
    @DAPTX4869 v 站的评论怎么发图来着,我记得是直接贴图片链接就行才对啊- - 超过时间也不让我编辑了
    vanishcode
        5
    vanishcode  
       2019-04-26 11:16:32 +08:00 via Android
    我还是老老实实用原生开发= =,electron 太大了。之前想开发过一个 menu bar 上的 app,用的 quark shell。结果也是各种不方便=。=
    xcodebuild
        6
    xcodebuild  
    OP
       2019-04-26 11:19:02 +08:00
    @vanishcode 是的,我现在发现写 Objective-C 好像也没什么不好的🤣 有跨平台需求再用 Electron 吧
    DAPTX4869
        7
    DAPTX4869  
       2019-04-26 11:19:23 +08:00
    @codefalling #4 到现在我都不知道评论咋发图...markdown 也不行
    binaryify
        8
    binaryify  
       2019-04-26 11:21:58 +08:00
    @DAPTX4869 直接发图片链接,不过限制图床
    xcodebuild
        9
    xcodebuild  
    OP
       2019-04-26 11:23:14 +08:00
    @binaryify 怪不得我记得以前我发过图片来着。。。微博图床不能用了随便找了个 v 站又不识别
    H0H
        10
    H0H  
       2019-04-26 12:05:41 +08:00
    JavaScript 跨平板桌面版肯定不成熟嘛,非马后炮。其实想一想,如果成熟,那主流跨平台方案早是 JS+HTML+CSS 了
    xcodebuild
        11
    xcodebuild  
    OP
       2019-04-26 12:07:55 +08:00 via iPhone
    @H0H 迅雷好像已经是 electron 的了

    但是性能和体积还是蛋疼
    Pastsong
        12
    Pastsong  
       2019-04-26 12:09:25 +08:00 via Android
    不怕踩坑可以用 react-native-{windows,macos}
    xcodebuild
        13
    xcodebuild  
    OP
       2019-04-26 12:13:46 +08:00 via iPhone
    @Pastsong 怕了😆 Cocoa 真香
    murmur
        14
    murmur  
       2019-04-26 12:15:37 +08:00
    @codefalling 迅雷以前不是自研的 directui 么
    walter211
        15
    walter211  
       2019-04-26 12:16:46 +08:00   ❤️ 1
    坐等 flutter
    bccoder
        16
    bccoder  
       2019-04-26 12:18:24 +08:00 via iPhone
    xcodebuild
        17
    xcodebuild  
    OP
       2019-04-26 12:24:06 +08:00 via iPhone
    @murmur 以前是的,新版似乎已经是 electron 了,挺卡的😶
    siyushin
        18
    siyushin  
       2019-04-26 13:08:24 +08:00   ❤️ 1
    提个小建议:把快捷键名和 App 名放的近一点,一眼就可以看到,不必再目光水平左移……
    frankmdong
        19
    frankmdong  
       2019-04-26 13:13:16 +08:00
    @codefalling #9 可以把域名改成:wx1.sinaimg.com ww1.sinaimg.com 不过估计撑不了多久
    xcodebuild
        20
    xcodebuild  
    OP
       2019-04-26 13:17:57 +08:00
    @siyushin 有道理,感谢反馈
    xcodebuild
        21
    xcodebuild  
    OP
       2019-04-26 13:18:58 +08:00
    @frankmdong 既然已经动手了估计是撑不了多久,故意对上传者可见其他人不可见这个设定有点坑人。。
    Sapp
        22
    Sapp  
       2019-04-26 13:41:55 +08:00
    我现在在用 electron 写一个标注软件,到目前为止性能我觉得还行,至少可以让我流畅的在一张图上标注几十个对象,而且开发速度快,可以用的库以及 UI 框架多,开发完自带三端适配,如果不需要和原生大量交互,electron 还是可以的。
    xcodebuild
        23
    xcodebuild  
    OP
       2019-04-26 14:02:40 +08:00
    @Sapp 嗯应用内的交互性能还是可以的,主要大量原生交互和窗口本身的绘制性能比较坑爹

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

    - Tony 在一个山洞里用一堆边角料都能做出来
    - 很抱歉,我不是 Tony Startk
    Dawnki
        29
    Dawnki  
       2019-05-02 17:49:41 +08:00
    electron 做一些小工具打个包至少也要 100M 起步..Orz
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1187 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:32 · PVG 02:32 · LAX 10:32 · JFK 13:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.