ITPub博客

首页 > 应用开发 > C/C++ > 互联网江湖,桌面客户端框架技术比武大会

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

原创 C/C++ 作者:IT人云胖 时间:2018-08-31 18:50:55 0 删除 编辑

By 技术怪咖 欧阳森林

** 导读:在互联网时代,如何将一个好的 idea 快速的转化为产品,如何在原有产品中增加新的特性,是产品能够快速的推向市场、快速占领的关键。因此,作为客户端的架构选型,面临哪几方面的需求?资深前端工程师欧阳森林针对其专业领域的经验,有着自己独到的见解。 **

 

## 前言

自从互联网江湖上出现了一部叫做 “ 云 ” 的秘籍,大大小小的门派,纷纷对外宣称自己掌握了 “ 云 ” 的核心,各种 “ 云 ” 应用层出不穷, Service 的各种架构在一次次的华山论剑上大放异彩,仿佛你要是不知道最新的 SaaS 架构,不知道微服务,那你就落后了时代。可惜,好的服务不过是内功心法,如果你的招式太过单一,用户体验不好,就只能表演一下胸口碎大石、银枪刺咽喉的工夫,行家当然明白你内功深厚一代宗师,可打赏的终究是看热闹的路人甲乙丙丁,用户感官上的体验直接决定了究竟是少林真传大师,还是行走江湖卖艺先生。

 

桌面客户端仍然是最重要的、复杂度最高的产品。变化纷繁,招式华丽才是广大路人们心中高手的形象,当然也只有程序的 UI 交互做的好,客户也才愿意买单。

 

 

在互联网时代,如何将一个好的 idea 快速的转化为产品,如何在原有产品中增加新的特性,是产品能够快速的推向市场、快速占领的关键。因此,作为客户端的架构选型,也就面临以下几个方面的需求:

 

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)

 


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

 

### Native 开发

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

 

优点:

* 客户端性能比较好

* 安装包比较小

* Windows 比较容易兼容 XP

 

缺点:

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

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

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

 

### Qt


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

 

优点:

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

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

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

 

缺点:

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

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

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

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

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

 

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

 

### 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 相比,各有优缺点,对比如下表:

 

| Item | NW.js  | Electron  |

| - | :-: | :-: |

| Sponsor | Intel | Github |

| Project inception | 2011 | 2014 |

| Supported System | Windows/Mac/Linux | Windows/Mac/Linux |

| Minimum Windows Version | Windows XP | Windows 7 |

| Apps build on it | WhatsApp for Desktop, Messenger for Desktop and more | Slack, Atom, Visual Studio Code, Skype and more |

 

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



Electron 和 NW.js 相比较来说, Electron 的发展更快、 bug 更少、贡献者更多、社区更活跃。 参考知乎上的某篇问答: [ 维护一个大型开源项目是怎样的体验? - zcbenz 的回答 ] ( https://www.zhihu.com/question/36292298/answer/102418523 ) ,根据 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 。



### 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 browser 模式的开发框架,能够完美复用现有的 Web 开发框架和技术,极大的提高开发速度,实现产品的快速迭代、最终实现产品的成功。

 

## 参考

我们在 2015 年初做全时蜜蜂客户端的架构选型时,曾考虑过 NW 、 Electron 和 CEF 三个框架,最终由于蜜蜂客户端要兼容 XP 、实现透明窗体和集成比较多的 C++ 模块而选择了 CEF 。事实证明,使用 CEF ,我们做到了每周发一个小版本、每个月发一个大版本的快速迭代,不间断且快速给客户提供了好用的新功能。而且据笔者观察,钉钉也在最近舍弃了 NW 换成了 CEF 作为桌面客户端开发框架。





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31551885/viewspace-2213354/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2018-08-24

  • 博文量
    2
  • 访问量
    971