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 的回答 ,根据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作为桌面客户端开发框架。

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

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

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

  2. Electron应用-云桌面客户端

    文章目录 云桌面初认识: 3v融合端三大特性,十大亮点: Electron 简介: 术语: 主进程与渲染进程的区别: 进程之间的通信: Electron API: 主进程的部分模块解析: 渲染进程的部 ...

  3. 什么是RIA?介绍几种RIA客户端开发技术

    什么是RIA? RIA(Rich Interface Applications)富界面应用,俗称胖客户端或者富客户端. RIA的优势 RIA 具有的桌面应用程序的特点包括:在消息确认和格式编排方面提供 ...

  4. 客户端自动化技术漫谈

     客户端自动化技术漫谈 2011-03-18 16:46:23 标签:技术 客户端 自动化 休闲 漫谈 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...

  5. J2ee分布式框架--技术介绍文档

    1.      项目核心代码结构截图 jeesz-utils jeesz-config jeesz-framework jeesz-core-cms jeesz-core-gen jeesz-core ...

  6. pywebview:使用python构建桌面客户端应用

    前言 我编写了一些python程序,但我并不满足与只用命令行运行,我希望能构建一个具有界面的桌面客户端应用,来运行我python程序的各种功能. 作为一个前端工程师,我最熟悉的当然就是Electron ...

  7. 桌面虚拟化云技术将支撑数字化医院

    桌面虚拟化云技术将支撑数字化医院 2013-12-04 10:32 现今医疗行业已经从医院--患者的二元关系走向从医院--患者--政府监督--医疗保险的多元关系,医疗体系需要更高效的运转,患者需要更好 ...

  8. 大数据开源框架技术汇总

    主要基于对现阶段一些常用的大数据开源框架技术的整理,只是一些简单的介绍,并不是详细技术梳理.可能会有疏漏,发现再整理.参考得太多,就不一一列出来了.这只是作为一个梳理,对以后选型或者扩展的做个参考. ...

  9. 汽车维修管理系统汽车维修管理系统采用B / S架构,主要使用Java技术进行开发,结合最新流行的java和mysql的SSM框架技术。

    摘 要 21世纪是一个知识大爆炸的时代,互联网拉近了人们的距离,信息化革命席卷了各个行业.物质生活水平的提高使得人们的消费观念悄然发生改变,人们对汽车维修管理系统的要求越来越高,这对于传统汽车维修管理 ...

最新文章

  1. scanf 接收 空格 输入_你需要知道的scanf函数用法
  2. 轮播图最后一张图结束如何平缓回到第一张_产品经理早期如何学习?
  3. 把命令行玩成“迷你谷歌”:可搜索、计算,还能翻译 | GitHub热榜
  4. 网格分割算法(Random Walks)
  5. Linux学习记录--开机挂载错误
  6. 使用sql server中的全文索引
  7. Java的未来项目:巴拿马,织布机,琥珀和瓦尔哈拉
  8. python经典程序实例_Python入门经典实例(一)
  9. nsdictionary获取值_objective-c – 在NSDictionary中获取值
  10. AOSP 安卓源码-ubuntu开发环境搭建
  11. weblogic启动后,抛出大量的java.lang.ArrayIndexOutOfBoundsException异常
  12. Docker之旅:了解Swarm集群
  13. 163网站顶部展出的大幅广告
  14. 推荐系统中的矩阵分解详解
  15. RS232串口转USB驱动无法正确识别
  16. px upx 和rpx
  17. xp计算机找不到音量调节,XP找不到音量控制程序怎么办
  18. [从零开始学习FPGA编程-16]:快速入门篇 - 操作步骤2-4- Verilog HDL语言描述语言基本语法(软件程序员和硬件工程师都能看懂)
  19. Word2007版首页页眉如何去掉?
  20. 【组队学习】【38期】组队学习内容详情!

热门文章

  1. ASMS数据库数据初始化
  2. java云接口_华为云JavaAPI调用数据设备接口(虚拟设备)
  3. 【捷哥浅谈PHP】第十一弹---NoSQL数据库之MongoDB的CURD操作(二)
  4. 精雕细琢与强大工具箱组合卓越结晶-2017版逐浪CMS官网改版感言
  5. 自动驾驶模拟试验构成要素和验证
  6. 【对讲机的那点事】对讲机耳机的种类你了解吗?
  7. 炼数成金R七种武器之金融数据分析quantmod
  8. 让英文操作系统正确显示中文
  9. html post密码加密,京东post登陆参数js分析,密码加密的RSA加密实现
  10. python亚马逊销量预测_亚马逊卖家如何预测一款产品的销量?