还是放弃了用 Javascript 写桌面应用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xcodebuild
V2EX    分享创造

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

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

    前些天开发了一个 macOS 应用来解决窗口切换麻烦的问题: 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
    YOOHUU
        3
    YOOHUU  
       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 吧
    YOOHUU
        7
    YOOHUU  
       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     Solana     3827 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 78ms UTC 10:20 PVG 18:20 LAX 03:20 JFK 06:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86