zoukankan      html  css  js  c++  java
  • Electron 和当下其他的桌面开发方法相比如何?

    作者:柳风
    链接:https://www.zhihu.com/question/264999651/answer/741654058
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    我大概开发Electron快两年的时间了,期间也做过一些产品。

    首先我们看一下我们常用的客户端软件开发都有哪些技术:

    首先是Microsoft阵营的

    Winform

    如雷贯耳,大多数人开发CS程序都是基于Winform去做的,它的有点在于简单、高效,但是它的缺点在于,如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样式表来讲,美化Winform的界面以及自定义控件是需要耗费更多的时间的。

    并且,Winform由于其出身,原生是不可以运行在其他操作系统之上的,当然,我已经很久很久很久没有用过Winform了,所以对其现在的发展现状并不是很了解。

    在开发上,Winforms简直不要太简单,如果对UI没有苛求的话,Visual Studio能够拖到你怀疑人生。

     

    WPF

    微软的又一个杀手锏,其基于XML+C#+CSS的呈现方式让它在UI上有了更加灵活的设计宽度,并且对大多数开发者来讲,前后端分离式的开发方式能够更好的组织代码逻辑,我是先学的Flex,后来才知道有WPF这么个东西存在,瞬间觉得非常亲切,不过其子集Silverlight却没有在WEB端发扬光大。

    同样,WPF不能运行在其他操作系统,并且在XAML中编写样式表,通用性还是不如HTML强,从学习应用的范围来讲,还是HTML更好一些。

    在开发上WPF前端X(A)ML、后台C#,与HTML+JS差不多,但是所学的知识点可能更偏向于.NET内部,也有可视化的编辑器,但是我之前用的时候手感比Winform的差太多了,不过熟练了之后基本上都是基于代码设计,倒也无所谓。

    UWP

    微软为了针对移动端市场开放的开发框架,我本人没有用过,所以不好做太多评价,但是从目前看来,有个老外说的好:UWP is dead because Windows apps are dead,有兴趣的同学可以去找找相关资料。

    总而言之,如果你的APP只需要运行在Windows下,我认为WPF或者UWP是最好的选择,毕竟在调用系统原生API上微软的亲儿子们有着巨大的优势。

    没有开发过,不做讨论。

    然后是Java阵营

    Swing

    零几年学Java的老头子们几乎都是从Swing开始学起的,Swing谜一般的默认UI审美观让我直接放弃了继续学习下去的动力

    不过我还是利用NetBeans和一个UI控件库开发出了一个比较漂亮的产品,给我的感觉就是这个家伙实在太重了,我也已经很久很久没有碰过Swing了,所以对于现在的Swing是个什么情况也不能详细介绍。

    使用NetBeans能勉强达到Visual Studio拖拽控件十分之一的手感吧,其他的我没试过,对我来讲简直是一种灾难……

    JavaFx

    怎么说呢……说实话我是Java程序员,但是JavaFx出来的时候我根本还没来得及做任何反应,这个家伙就消失在了大众的视野中,也许是我孤陋寡闻,也许是圈子不同,我身边的开发朋友没有一个在用JavaFx。

    他的优点在于可以跨平台,缺点在于整个生态环境非常不好,与Winforms一样,自定义一些控件相对比较困难。

    接下来是Adobe阵营

    Air

    我开发过很长一段时间的Flex程序,当Air第一次出现在我眼前的时候,给了我眼前一亮的感觉,相对于Swing来讲,Air更漂亮,因为有很多Flash控件的积累,可选择的资源也会更多一些。

    但是随着Flash在浏览器上的节节败退,Air也悄无声息的消失在了大众的视野当中。

    它的优点在于可以跨平台,可以基于Flash做出很多超级炫酷的动画特效,但是缺点主要就是效率实在是太低下了,并且在调用操作系统原生API的时候也非常不方便。

    开发方式就是硬编码,虽然有FlexBuilder可以使用,但是简直是一个灾难级别的存在……绝对怀疑人生……

    而Flash、Flex本身就可以基于Flash Player独立运行,所以不再详细说了。

    夹带着谈谈Apple

    苹果的桌面开发,我没有开发过,但是在自己的MBP上玩过,基于Objective-C(或现在的Swift)对于很多程序员来讲有点难,现在大多数程序员都是基于C#、Java进行开发,能够使用C、CPP之类中古语言的程序员着实不多,并且与Windows一样,不跨平台,所以开发纯Objective-C的苹果桌面程序的程序员真的是少之又少。

    优势嘛,跟Winforms一样,可以非常方便的调用操作系统底层API,劣势也一样,不跨平台、自定义控件比较复杂,可用资源太少。

    再来说说QT

    QT C++是一个神奇的存在!

    我相信现在有非常多的跨平台Desktop Application是基于QT编写的,它不仅能够保证跨平台,而且能够将运行效率最大化。

    QT最近在跟车企进行合作,很多监控设备的图形化展示,甚至是试验车内部的液晶仪表盘上都使用QT进行开发的,QT最大的优势就是跨平台!高效率!但是与Objective-C一样,CPP如同一座小山横在了众多server side程序员的面前,如果没有CPP这道小山横贯在前,我认为QT是最好的Desktop Application特别是嵌入式终端的UI开发框架。

    QT另外有一个优势在于,它在UI上似乎要比之前几位要方便一些,在它的QML中甚至可以直接使用JavaScript(当然,Java也内置了JS引擎),同时QT中也包含了大量的标准CSS样式表可以使用。

    虽然这些特性在其他的语言中也有,例如WPF等,但是QT在保证效率的前提下还能做到跨平台就显得弥足珍贵了!

    所以,如果希望自己从事真正意义上的Desktop Application development,QT绝对值得你去学习。

    QT有可视化编辑器,但是相比较而言,可能略强于NetBeans的Swing,但是跟VS比起来还是差太远了,不过大多是实际开发都是基于代码的,倒也无所谓。聊胜于无吧。

    最后,我们聊聊Electron、NW.js

    介于NW的日渐式微,所以我更推荐Electron一些。

    我是做大数据开发的,但是我的前端技术还不错,对Sass、Less信手拈来,不基于Bootstrap也能基于Sass或者Less开发类似Bootstrap的UI(虽然审美观还有待大大的加强),我从AngularJS转到VUE这个阵营差不多只花了两天时间,自己可以基于Canvas硬实现流程图(不基于任何框架),但是我自认还达不到熟练使用D3.js或者开发WebGL的水准。

    我不需要QT的高效率, 也不希望渲染个大列表需要很长时间,还希望能够达到跨平台的目的,对于DirectUI之类更低层的UI技术根本没有精力去掌握,所以对我来讲Electron简直是最完美的解决方案。

    我使用Electron的理由还包括:可以方便的通过Node.JS调用系统API、可以使用SQLite做本地字典项的缓存处理,可以将复杂的计算逻辑放在客户端进行,从而减轻服务器端的压力等等。

    所以,Desktop Application的开发,我只推荐两种:

    Electron(或NW.js)和QT

    其他方案我都不是特别推荐。

    当然,如果你的程序只是跑在Windows上,就不用考虑了,WPF是你最好的选择。

    Electron开发不要太简单,只要会写HTML,就能写客户端,剩下的交给时间慢慢打磨即可,Node.JS虽说不是最终极的优秀中间件,但是目前来看在Desktop这一块还有发挥余热的地方。

    当然,很多人说,我就是不喜欢Electron的应用,体积大效率低。

    无可厚非。

    但是我不在乎,因为我的硬件,跑个Electron,绰绰有余的多,十几年前刚入行的时候还有人跟我扯打孔机呢。

    完结

    本文所提到的技术,我并不完全掌握,特别是Objective-C,因为是即兴回答,我也不可能把上面所有的技术都自己跑一便,所以难免有错误,如有笔误之处,还希望各位看官大佬轻拍指点。

    作者:刘春雷
    链接:https://www.zhihu.com/question/264999651/answer/848101852
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    2020-10-29 日补充几张汽车船的图

    可以任意放大缩小旋转汽车和甲板 立柱等碰撞检测打印预览 批量打印

     


    没想到很多人喜欢,h5目前的界面能力很强,2019-12-01 补充几张图:


    主界面功能布局做了调整窗口折叠根据html5 网页版 做的安卓版增加了双Bay视图增加了Web 3D显示,放大缩小旋转拾取优化了一些其他功能各种不合规积载检测

     


     

    下面是原始回答:


     

    我们做船舶配载仪就是用WPF写的,采用了MVVMLight及Ribbon风格

    后来我们想要做成Web版,就启动了Web化的任务,经过几个月功能基本已经移植完成了

    底层算法用c++写

    服务器端:用Java调用C++

    前端:采用html5


    优点:

    1. wpf能实现的功能,html5 基本都能够实现
    2. 想实现单机版只需要用electron包装一下
    3. 生态好 以前写wpf就我们两个人 现在web端已经4个人了
    4. 我们在安卓移动端做了尝试,采用cordova 很方便的实现了移植,大概需要几天时间
    5. 还可以享受WebGL在3D方面的福利

    回答楼主问题:

    (1) 从Wpf转Html5 还是很快的,完全没压力,我就是直接上手写的

    (2)建议楼主学一学,做为程序员终归要学习几几几几种语言的 ~ ~


    下面是网页版的几张截图

    多皮肤实时切换集装箱船 任意放大缩小 拖动

    2020.3.3号 补充几张用h5 做的安卓学习项目的截图

  • 相关阅读:
    使用用Ghost制作的win2k3和winxp文件具有相同的SID的解决办法
    64 bits Windows 7 使用 regsvr32 的註冊方式(转)
    怎么实现用户匿名访问web,但数据库要用Windows集成验证方式(数据库和web服务器分别在两台机器上)
    为什么按照微软给定的匿名配置Web 同步最终造成创建订阅的步骤总是失败?但改为需要身份验证就行了
    How to edit Team Build Types
    利用WhiteHose一步步建立分布式系统的框架(二)创建LDD步骤
    发现:InfoPath 2007 Training Labs地址
    在MSF中怎么区分易混淆的工作项类型:Bug、风险和问题(我个人的理解)
    RGB Colour Map
    How to distinguish Design time or Running time in Mobile cusotmer Contorl(the NetCF2.0 is different to NetCF1.0)
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/14260881.html
Copyright © 2011-2022 走看看