摘自 技术怪咖 欧阳森林
作为客户端的架构选型主要面临以下几个方面的需求:

1.开发速度快,能够快速迭代,快速试错

2.客户端能够跨平台,同时适应Windows和Mac平台

3.用户界面友好,满足用户对界面的苛求

4.能够与快速与第三方的C++应用、Web应用集成

5.客户端安装包大小适中,减少用户的下载和安装时间

6.支持XP系统(国内还有近10%的用户是XP系统)

7.最大化利用公司现有的开发人员,减少因为技术选型引起的大规模人员变动

客户端的开发技术/框架,主要以下有几种:

1.纯Native开发, C++/C#/duilib+C++(Windows), Objective-c(Mac)

2.Qt(Windows/Mac)

3.NW.js/Electron(Windows/Mac)

4.CEF(Windows/Mac)

下面分别就这几种开发技术/框架,分析其适用的场景和优缺点
1.Native开发

在桌面客户端开发中,纯Native开发是一直沿用至今,也是使用最多的技术。使用Native开发,能够实现最好的性能,可以比较容易的与第三方的C++应用集成。

优点:

•客户端性能比较好

•安装包比较小

•Windows比较容易兼容XP

缺点:

•界面开发复杂,开发周期长,无法实现快速迭代

•跨平台开发困难,需要针对Windows和Mac分别开发,人员投入大,后期维护困难

纯Native开发的优缺点,使得其适用于客户端性能要求高、界面简单、客户端安装包小、开发人员富足等场景。

2.Qt一直以来被许多用户作为跨平台客户端开发的首选,其功能强大、支持的操作系统丰富、与C++结合紧密,其在某些特定领域(如嵌入式领域、军工、安防监控领域等)非常受欢迎。

优点:

•支持的操作系统丰富、跨平台性好

•性能比较好,接近纯Native开发的性能

•功能丰富、具有各种成熟类库

缺点:

•Qt开发人员不足,市场上Qt的开发人员一直都很少

•库太大,导致安装包也会过大

•Qt学习成本高,需要花费很多的时间和成本才能达到熟练开发的程度

•界面开发效率不高,满足不了互联网快发迭代的要求

•Qt使用GPL授权协议,需要商业授权协议才能做商业应用

从使用的情况来看,Qt作为跨平台的桌面端开发框架,有其有力的方面,但缺点也制约了其快速发展和在客户端开发的大规模使用。

3.NW.js/Electron

随着PC机不断提升的机器性能以及H5标准的发展,利用JS语言依靠Browser为载体的B/S体系软件,有着很强的交互表现力,使用Html/JS作为UI的开发语言,可以十分高效快速的完成各种复杂界面(尤其是各种动画效果)开发。

随着Nodejs和Chromium的CEF越来越成熟,出现了将Nodejs与Webkit集成的开源框架,比较成熟的有NW.js(前身node-webkit)和Electron(前身atom-shell), 该类型的框架既能使用Html/JS来开发UI界面,又能集成C++库来完成大计算量的任务,使得开发基于Web和Native混合的应用非常方便。

NW.js和Electron相比,各有优缺点,对比如下表:

由于集成了Node.js和Webkit,以及丰富的Node.js第三方库,NW.js和Electron提供了完全使用Javascript来开发客户端的能力。只要熟悉前端Web开发,就能迅速开发出与传统客户端相媲美的客户端软件,开发速度和功能都能满足目前互联网时代的要求,大家的前端开发人员储备,海量的Web 框架和UI组件,使得它们成为了目前最炙手可热的客户端开发框架。

Electron和NW.js相比较来说,Electron的发展更快、bug更少、贡献者更多、社区更活跃。参考知乎上的某篇问答: 维护一个大型开源项目是怎样的体验? - zcbenz 的回答 ,根据NW和Electron的作者自己的回答,显然Electron比NW.js更好。如果不考虑支持XP系统,Electron更适合作为客户端的框架。

优点:

•跨平台性好,可以同时支持Windows、Mac和Linux

•开发速度快,能够快速构建产品推向市场

•前端人员储备丰富,招聘开发人员容易

•框架开源,升级比较快

从开发桌面客户端的便捷性、跨平台性等来看,NW.js和Electron几乎满足互联网时代的客户端架构需求,但它们也存在一些不足。

•Electron支持的最低Windows版本是Windows 7, 当开发的产品需要支持XP系统时,只能选用NW.js

•NW.js和Electron对透明窗口支持不好,NW.js支持Vista、Electron支持Windows 7以上的系统,并且必须在DWM(Desktop Window Manager)打开的时候才能实现透明窗口,NW.js和Electron的透明窗口无法调整大小,Electron在Mac上,透明窗口的阴影显示不出来

•由于集成了Webkit浏览器,客户端安装包过大

不考虑实现透明窗口,Nw.js和Electron是目前桌面客户端跨平台方案中最廉价和最通用的方案,因此,在做客户端框架选型时,可以优先考虑NW.js和Electron。

4.CEF

Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件(俗称谷歌亲儿子),支持Windows, Linux, Mac平台, 其包含C/C++程序接口,能够完美的与C++库集成,完善的支持Html5 Web页面开发,并且可以通过修改编译选项和源代码后编译的方式来实现剪裁CEF和提供原CEF没有的功能,定制自己的窗口类型。

优点:

•CEF可以通过编译和修改源代码的方式来定制

•可以通过C++控制窗口类型,支持透明窗口

•能够使用最新的CEF来兼容最新的Javascript标准和CSS,或者固定CEF的版本来支持Windows XP

•底层与C++集成容易

•可以使用Javascript来开发UI,C++实现大计算量的任务

缺点:

•与操作系统相关的功能,如读取注册表、写文件等功能,需要C++实现,增加了一些C++开发的工作量

•不经过裁剪的CEF,安装包会过大

对于要实现透明窗口和集成大量的C++模块的应用,CEF是个不错的选择。

结论

在互联网时代,选择一个合适的客户端框架,对于一个产品快速的推向市场,有着至关重要的作用。NW.js、Electron、CEF等Web brower模式的开发框架,能够完美复用现有的Web开发框架和技术,极大的提高开发速度,实现产品的快速迭代、最终实现产品的成功。

桌面客户端框架技术选型相关推荐

  1. 互联网江湖,桌面客户端框架技术比武大会

    By 技术怪咖 欧阳森林 导读:在互联网时代,如何将一个好的idea快速的转化为产品,如何在原有产品中增加新的特性,是产品能够快速的推向市场.快速占领的关键.因此,作为客户端的架构选型,面临哪几方面的 ...

  2. 桌面客户端开发框架技术选型

    互联网出现之前,C/S 架构是软件产品的主流,后面渐渐地被 B/S 架构所取代(因为不需要配置客户端),但由于浏览器有刷新机制,服务器的负载等因素,C/S 架构的响应速度和流畅性是好于 B/S 架构的 ...

  3. 服务化框架技术选型实践

    前言 首先本文不讨论为什么要服务化,包括服务化的优点缺点. 其次本文也不讨论什么是微服务,也不讨论微服务和SOA的区别. 最后本文也不讨论哪个技术最优. 服务框架构成 最基本的服务框架 基本的服务化框 ...

  4. 【转】服务化框架技术选型与京东JSF解密

    声明:本文转载自微信公众号"开涛的博客",转载务必声明. 作者:章耿,原京东资深架构师,曾负责京东服务框架,配置中心等基础平台.近十年工作经验,专注于基础中间件等底层技术架构,对分 ...

  5. 务化框架技术选型与京东JSF解密

    作者:章耿,原京东资深架构师,曾负责京东服务框架,配置中心等基础平台.近十年工作经验,专注于基础中间件等底层技术架构,对分布式系统/服务化/DevOps建设有一定经验. |前言 首先本文不讨论为什么要 ...

  6. 【译】前端框架技术选型 React vs. Vue (vs. Angular)

    这是该系列文章的第2部分:"Fundbox的前端技术选型".第1部分介绍了Fundbox的技术现状以及我们重新设计它的动机.第2部分介绍了选择新框架背后的考虑:是迁移到React, ...

  7. 轻量级 Java Web 框架技术选型

    2019独角兽企业重金招聘Python工程师标准>>> 本文是<轻量级 Java Web 框架架构设计>的系列博文. 前面已对该 Java Web 框架做了一些简要描述, ...

  8. 三大前端框架技术选型对比

    1.ReactJS简介 React 起源于 Facebook 的内部项目就在2013年5月开源了. 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单.所以,越来越多的 ...

  9. 技术选型都做不好,难怪自动化做得这么费力...

    01.自动化测试框架 在学习自动化测试或者实践自动化测试时,我们一定会对一个名词不陌生,那就是"自动化测试框架". 而有些人也将 Selenium.Appium 这样的工具也称之为 ...

  10. 你真的会自动化测试?自动化测试技术选型抉择

    自动化测试框架 在学习自动化测试或者实践自动化测试时,我们一定会对一个名词不陌生,那就是"自动化测试框架",而有些人也将Selenium.Appium这样的工具也称之为" ...

最新文章

  1. linux常用运维工具uptime、iostat、vmstat、sar
  2. python字符串压缩字_gzip如何在Python中压缩字符串?
  3. button 去掉原生边框
  4. 11-jQuery的事件绑定和解绑
  5. 于企业而言,Linux 与 Windows 哪个更安全?
  6. linux文件的特殊权限,Linux系统文件的默认权限和特殊权限
  7. 规格选择_止水螺杆规格及选择
  8. php h2,微信连接失败:一直返回h2Moved/h2 (终于搞定了)
  9. 合并相同数据的行_R语言笔记(六):数据框重塑(reshape2)
  10. android连接SQLite数据库-----增加改查+分页
  11. java下载网页所有图片_java 下载网页,图片 | 学步园
  12. 事件元素JS的event对象--知识点总结
  13. MIKE水动力笔记8_冷启动与热启动
  14. 神经网络浅讲:从神经元到深度学习
  15. 秦殇千年轮回java游戏下载,智云稳定器如何拍旋转画面 使用稳定器拍摄画面方法...
  16. postgres mysql quora_DesktopReader for Quora
  17. Ubuntu20.04--开机自动运行脚本(命令)--方法/实例
  18. 4.证券投资基金的监管
  19. UVa——1600(巡逻机器人)
  20. 证件照在线生成源代码

热门文章

  1. Linux下的数学工具Maxima 简明教程(上)
  2. 【题解】【PTA里的Python题库】7-1 身份证校验_python
  3. python查看微信撤回消息_Python查看微信撤回消息代码
  4. 济南市公安局人口数据备份库项目(数据复制)之二
  5. 深入理解Android之Xposed详解
  6. 七大江河水系--黄河(二)
  7. tomcat 虚拟目录配置appBase和docBase的区别
  8. JS实现获取今天星期几
  9. Nodejs—即时通讯
  10. 安卓如何调出软键盘_系统软键盘Android在外接物理键盘时,如何强制调用系统软键盘?...