腾讯QQ为什要自研UI框架,而不用QT/MFC?

论坛 期权论坛 期权     
匿名的论坛用户   2021-1-2 06:52   8170   10
分享到 :
0 人收藏

10 个回复

倒序浏览
2#
热心的小回应  16级独孤 | 2021-1-2 06:52:49
2013年在QQ开发中心的最后一个项目就是把QQ整个Solution从VS2005升级到VS2010,包括SDK兼容修改,彻底去MFC,主要是我一个人完成,组长lorischen给了不少帮助。当时的QQ整个应用层solution大概有60个左右的projects,其中包含MFC的项目我记得好像只有3个,主要是跟TXPlaform相关的,用于和浏览器插件交互的,去MFC的方法就是转换成ATL。

QQ 确实没有使用MFC/Qt这种第三方框架,目前使用的是完全自己撸的第三代Hummer框架,其中UI框架叫做GF,基于DUI理念设计的。Hummer框架是05年开始计划,一直到QQ2009才用上这个全新的框架。Hummer框架设计理念就是平台化,插件化,高性能。当时在职的时候我跟同事经常吐槽代码怎么这么烂,后来离开出来看看其他公司的代码才知道QQ无论从架构设计还是具体编码都是我目前为止参与过质量最高的项目了(也因为我后来经历的公司一个比一个烂,sigh)。

回到题目上,为什么不用QT/MFC?

从专业性上来讲
因为公司有实力和资源自主开发一个框架,这样可以不受制于人,并且根据自身业务特点对框架进行针对性的定制和性能优化,而且这也是大公司非常专业的做法。Client开发不像后台开发有很多可靠的开源解决方案,所以造轮子是十分必要的,而且可以造出来比市面上更好的轮子。为什么公司喜欢造轮子,因为造轮子才显得专业:
为什么很多公司做c++不用智能指针,也不自己封装一个好用的? - tishion的回答 - 社区
https://www.zhihu.com/question/37856833/answer/73824429

从技术选型上来说
先说MFC,没饭吃只是对Win32 SDK的一个C++封装,并且提供了框架级别的Windows程序开发方法,可以说是Windows平台的第一代C++开发框架。既然只是封装,所以并不存在什么GUI框架,用MFC开发出来的GUI程序所有的UI渲染都是Windows原生的window,控件以及消息循环。MFC也的确提供了非常丰富的编程模块(Hierarchy Chart),如果QQ全部基于MFC来开发是肯定没有问题的。但是副作用是非常明显的,在今天来看MFC的缺点是性能会有很大的折扣,对于QQ这种内存密集型程序来说,用户体验会受到严重影响。但是在当时来说不用MFC的原因只有一点,MFC无论是动态库还是静态库生成的目标程序体积都会非常庞大(Windows系统本身不包含MFC库),在当年网络带宽并不富裕费用高昂的情况下MFC对成本的影响都非常大,这也是自从计算机行业进入互联网时代之后MFC一直被业界所诟病的缺点,微软自己都嫌MFC体积太大。

再来说Qt,这个过程我就没参与过了,不过可以猜测跟license有关,跟性能有关,当然也跟体积有关。不过从腾讯做产品的精细程度来说,任何臃肿的第三方框架都是不会被翻牌的。粉丝注意,我这里说的臃肿是指在完成一个需求的所有可行技术方案比较来说的。别怼我,我不懂Qt,就是负责过一两个基于Qt的产品的架构和开发而已(Garena)。

最后一点,现在Client端的开发已经很少需要做这么彻底的基础框架了,都在往Web方向发展,目前来说也就中国的大公司能在PC产品上有这么深厚的技术积累和精细的用户体验。
我之前回答过一个问题关于MFC/QT:
能否比较一下常见C++开发框架的API风格? - tishion的回答 - https://www.zhihu.com/question/34653962/answer/59624066

-----------手动separator -----------
不建议大家关注我,因为我点赞/关注/回答/提问的东西范围比较广泛,可能有些内容会引起关注者反感,如果纯粹是为了交流技术,我个人有个收藏夹,我把平时回答的所有跟技术相关的问题都收录到这个收藏夹子里了,有兴趣的可以关注:tishion的技术笔记
3#
热心的小回应  16级独孤 | 2021-1-2 06:52:50
不好意思没注意把评论关掉了,欢迎撕逼。。。

顺便吐槽下啥时候社区能支持markdown


我来实名怼@王津

腾讯在用MFC的时候你可能还不知道这叫MFC或者MFC 还没有出来,只能用win api去画。

Qt也不渣渣,微软自己的软件有的都调用了Qtcore。http://www.zhihu.com/question/62083970
参考这个。

至于说Qt笨重跟渣渣的人,看到这里我就笑了。说到笨重,你怕不是自己把没有用到的模块都加上了吧。Qt现在可是当今跨平台的唯一选择Framework。敲黑板!!!是Framework!!为啥微软大多数不用?因为没有跨平台需求啊。为啥QQ不用,你看QQ跨平台么?

参考现在新出的桌面端软件去安装目录中找一下大部分是有Qt的dll的。参考暴雪的平台与网易的魔兽争霸的平台。去自己看下安装目录。

参考我司WPS在win跟linux上的效果。看看差别大么?

利益相关,大公司不用?除非像我司一样自己拉出来一个Qt的分支自己去维护,昨天刚改了一个Qt的bug。逃)
4#
热心的小回应  16级独孤 | 2021-1-2 06:52:51
更新于2018/11/27 凌晨
今天恰好又刷回到这个答案,距离这个回答已经过去一年,本以为题主早已放弃此项目,所以特地去github上看了项目动态,没想到这个项目一直在更新,深有触动。所以特地写了一篇文章以反思自己的这个回答。
秋城:偏执的人如果题主还在看的话,请听一言,项目本身在技术上确有缺陷,已有大神指正,可听之并加以改进。敢于妄言且坚持的人少见了,逆水行舟或者雪夜独行,兄弟还要能听得进建议方可啊,共勉,加油。

上一个 问题中 https://www.zhihu.com/question/66934513 我是挺你的。毕竟开源不易,更何况一份新开源的代码有诸多不足是非常正常的,这个要靠不断的迭代更新来完善,所以大家即便喷你的狂言,也会从实际出发指出你的不足。 @诸葛不亮 在那个回答下写的很中肯,这是确实存在的问题,虚心接受,慢慢补足就好了,何必非要把自己作为一个受害者的角色来“反抗压迫”呢?
其实每个有过实际开发经验的人都会明白,你这份代码目前来说只是一个玩具,太多实际项目中必不可少的东西这份代码里面都没有,是不可能拿到商业项目中去用的。
MFC是过时老套的技术,都没有必要去对标,但是Qt却是实打实的被广泛应用到各种商业项目中的,庞大是没错,但那不是虚胖,那都是用真实的实战练出来的肌肉(Qt绝对不仅仅是界面库)。我甚至可以断言:靠任何一个人个人的力量,甚至小的非商业团队的力量都是不可能超越过Qt的,哪怕仅仅是界面部分!就你说的guilite那个类似DOM树的维护方式就是错的,你可以问自己一个问题,现在有10万个大小不一的控件,你是怎么做HitTest的?怎么渲染不同Z序的Item相交部分的?没有BSP tree,也就是写写普通的界面而已。(别问我,我也只是知道有这么回事儿,我是算法渣)。
还有GUIlite里面那个模仿MFC cmd路由的大大的function map,也太拙劣了。这都什么年代了啊,新设计的库怎么还去模仿MFC那一套几十年前的技术呢?
自己有干货大家都很佩服的,能开源出来那更是非常赞,但是老是这么冷嘲热讽别的技术,又不能拿出来更好的东西,就有点过了,况且你做出来的东西还真没有Qt的千分之一呢,没错,是千分之一!
5#
热心的小回应  16级独孤 | 2021-1-2 06:52:52
Qt商用是要付费的。十几年前MFC盛行,很多软件都是MFC开发的,后来微软推出了.NET,战略重心也就移动到了.NET上,这是技术演进的趋势,是有时效性的,势必影响MFC。

作为QQ,是腾讯的核心产品,发展壮大后,当然要有自己的核心技术才不会受制于人,也只有这样才能满足战略高地的需要。好比Facebook的HHVM,这些都是自家的技术生命线。

看到有些回复就是单纯的喷。不要动不动就喷,很多事情你是不了解它的来龙去脉的。光喷“这货不行啊”,而不理解其在一定时期中的先进性以及历史进程推动下技术的不断向好趋势,都凸显你的肤浅和苍白。
6#
热心的小回应  16级独孤 | 2021-1-2 06:52:53
如果我没记错的话,当年 OICQ99a~2000a、QQ2000b~c 这些元祖版本好像是用 Delphi 写的。
我是从 OICQ2000a 开始用的,之后因为域名被 AOL 走法律途径回收、腾讯才改名 QQ。
之后好像 QQ 就直接跳到 2003 版,敢情是从那时候开始用的 MFC?
不过,如果 Delphi 写的程式无法用 ExeScope 检视对话介面素材的话,那么这些元祖版本就应该都是 MFC 应用。
上面这句话我收回,原因请看评论串。
P.S.: AOL 因糟蹋产品而出名。被 AOL 收购过的产品没几个有好下场。ICQ 倒头被转卖给一家俄罗斯公司,而 Netscape 则是永远地死掉了。
# EOF.
7#
热心的小回应  16级独孤 | 2021-1-2 06:52:54
提问者是骗回复+推广/秀自己gui的,鉴定完毕!
8#
热心的小回应  16级独孤 | 2021-1-2 06:52:55
原来这提问纯粹是为了钓鱼宣传他的六千行秒QT,我觉得他是已经魔障了
枉我白手机码这么多字
————————
反对装逼回答,QT的高效是显而易见的,要真是渣渣能这么多人用?
我不是内部员工,只能推测腾讯选择的理由
最主要还是时间线的问题,QT出来之前(经提醒应该是QT流传之前)腾讯QQ就已经做成熟了,所以不可能用QT
然后回到腾讯开发的主要时间段,应该是2000年初吧,那个时候开发PC软件,最常用还是VC,但是MFC真的太笨重了,就像一部性能很差的手动挡车,又复杂又不灵活。相对于直接用win32 API根本体现不出优势
那么,有条件的话,自己做一套UI库肯定好用的多,而且那个时候的UI,没有现在这么华丽,各种弹出渐变缩放动画效果,做一个UI框架也不会很费劲,于是就有了
我推测应该是这样,如不对轻喷
9#
热心的小回应  16级独孤 | 2021-1-2 06:52:56
无语了,是不是开发者啊???Mfc和Qt都用的场合很多好不好?毕竟都是久经考验的,随便一个什么gui你敢用?连开发文档都不全,谁知道里面有没有大坑?你要推广gui表示欢迎,但故意诋毁被市场广泛认可并应用的产品,就有点low了。
10#
热心的小回应  16级独孤 | 2021-1-2 06:52:57
十年前qq确实是用的mfc
11#
热心的小回应  16级独孤 | 2021-1-2 06:52:58
因为自研UI框架不难,还能获得定制化带来的好处,所以为什么不去做呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3118703
帖子:623848
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP