[社交] 如何看待新版桌面端QQ?

[复制链接]
九命黑猫 发表于 2023-11-4 20:56:57|来自:福建 | 显示全部楼层 |阅读模式
QQ技术团队针对内存占用优化的问题进行了技术分享。
新QQ NT桌面版如何实现内存优化探索?
7月3日,QQ Windows全新体验版上架官网。
QQ windows版-新不止步·乐不设限
2月24日,腾讯QQ Linux端更新3.1.0版,适配龙芯LoongArch架构。
QQ Linux版-新不止步·乐不设限
近日,QQ for Mac正式上线App Store。
QQ Mac版-新不止步·乐不设限
QQ 团队启动了 QQ NT 的架构升级计划,表示将同时满足 Windows/macOS/Linux 三大桌面平台用户的需求。
全部回复5 显示全部楼层
tenx007 发表于 2023-11-4 20:57:56|来自:福建 | 显示全部楼层
1994 年,中国正式接入国际互联网,自此,开启中国互联网元年。在这近 30 年的发展史上,产生一大批优秀的互联网产品,同时,它们也是我国互联网发展的见证者与参与者,这其中就有我们不得不提的一个划时代的、伟大的产品:腾讯 QQ。
可以这么说,腾讯 QQ 它承载了无数网友的青春岁月与喜怒哀乐。20 多年过去了(QQ 前身叫 QICQ 2000 年 11 月正式更名为 QQ),曾经最早使用它的那个青涩少年如今已是中年大叔了,满满的都是回忆!


早些时候,就有消息称 QQ 团队就启动了桌面端 QQ 的架构升级计划,新版客户端采用 NT 架构,全面转向 Electron 开发框架,并在动态交互、用户界面部分重新设计,整体风格更时尚、简约。
腾讯 QQ 团队发布最新 Windows 平台新版客户端的最新动态,继 macOS、Linux 之后,新版 QQ 终于要登陆 Windows 平台了。内测活动将在 3 月 24 日开启,首个公测版的版本号为 9.8.0.11111,默认采用扫码登录方式,用户也可以手动输入账号密码。


这也是 QQ 继去年对 MacOS 版、Linux 版全新升级后的第三次重大升级。
为什么要进行技术重构?

众所周知,QQ 桌面端先起于 Windows 版本,后才有 macOS、Linux 版本。
但 Windows、macOS、Linux 三端起步都是独立团队、独立代码实现的,Windows 功能最丰富全面,Mac 主打创新体验,功能相对较少,Linux 最简陋(版本更新也较少)。
而这次腾讯 QQ 整体“推翻”重构,采用新的跨平台开发框架,新版 QQ 会比现在的 QQ 更好用、流畅和好看。
基于 Electron 跨平台框架构建的新版 QQ 客户端,也更符合当下的发展趋势。它可以兼容 Mac、Windows 和 Linux,构建出能够在三个平台的运行的应用程序。
腾讯 QQ 这次的技术重构,不仅能够提升内部的开发效率,也能够进一步提升软件功能的迭代速度(使用 Electron 可以做到三端统一发版、更新),新版 QQ 还加入了对国产架构龙芯 Loongarch64 的支持(加入对国产架构的适配,这对如今大环境下,国产替代化进程中绝对是一颗重镑炸弹!),从而给用户带来更多、更好的功能体验。
基于 NT 技术的重新架构,对于使用 PC 端 QQ 的用户而言,可以让用户在上述三个桌面版本中,操作、视觉都能得到完美的一致性体验,以及性能大幅提升的体验。
随着 QQ NT 行业生态的形成,也将引领国产自主软件进入跨平台一致性体验的新时代。
NT 架构下 Windows QQ

经过长期的更新、迭代,QQ 软件无论是从界面、功能、用户的体验等方面都有质的飞跃。
目前,QQ 的 MacOS、Linux 版本都是采用 Electron 框架,根据腾讯 QQ 项目组消息,Windows 端也将跟进底层架构更新,推出同样采用 Electron 框架的全新版本。
这次,做为一个 24 岁的国民应用软件,它的桌面端迎来了一次由内而外的全面更新。


而这次的更新,带来的变化更为显著,与之前的旧版 Windows QQ 相比,新旧版之间最大的差异就是采用了新的 NT(New Technoly (全新技术))平台架构。也是 QQ 首次针对 Windows、MacOS、Linux 这三个版本,做了技术架构上的统一,使得三端的版本无论是在外观、操作和性能上都得到一致,提高了用户的操作体验感。
据了解,NT 架构是 QQ 提出的一种新的软件架构框架,它基于新的 NT 跨平台框架,以及统一的 Electron 技术,实现了多个系统平台之间,QQ 架构的统一。


新架构不仅具有更高的可扩展性,还能平衡不同平台之间系统的版本与功能差异。同时还满足 Windows / Mac / Linux 三大桌面平台用户的需求,比如:各平台功能、界面、风络统一,对用户来说简直是一个非常完美的体验,终于不再为频繁切换不同的系统平台而苦恼了。
NT 构架最大的优点


  • WEB 前端开发效率高
  • 维护难度低(相较于旧版本)
  • 多平台兼容性强(多端跨平台的统一)
  • 无需要针对各个平台进行深度改造
新版 Windows QQ 功能内容


  • 全新架构:QQ NT 技术架构
  • 全新UI:采用三栏式设计
  • 功能能力:支持消息、QQ空间、夜间模式、截图、群聊与群应用、文件传输与管理、全局搜索、收藏、主面板状态展示等
全新 UI界面




全新UI界面三栏设计,功能导航、消息列表、聊天窗口,由左到右放在同一个窗口中排列,相较于旧版本,这种设计在操作上更为直观。
聊天功能




在聊天功能中,已经支持表情分类,用户可通过分类快速查找所。新版客户端将语音、视频入口并列放在聊天栏的右上方,同时支持分享屏幕。
消息列表




支持好友消息列表置顶,还可标记未读。
QQ 空间




QQ空间,在客户端可直接查看,不用再去网页登录的形式来查看QQ空间了。
文件管理器




新版本的文件管理功能更直观,支持更加全面的管理聊天记录和文件,同时也非常方便管理我们发送与接收的文件(旧版需要打开文件助手查看管理),更利于我们对文件的查找与搜索。
截图功能




截图功能也得到了提升,支持隐藏当前窗口截图,不用再次切换,截图完毕后,自动复制到对话框,双击图片即可对截的图进行编辑。


还可以进行录屏操作。
存储空间管理




对于 QQ 应用程序的存储空间管理也较旧版本做出于较大的优化,和目前微信的功能相似,也更有利于用户管理与操作了。
夜间模式




总体来说,此次升级后的新版 Windows QQ 给人一种焕然一新的感受。旧版的 Windows QQ 采用的是多窗口分布界面,一旦打开的窗口过多,就需要用户来回切换,特别繁琐。而新版界面采用了三栏式的 UI 设计,整体风格显得更加个性简洁,内容分类清晰,更加有利于内容的查看。另外,对我们日常办公能力也做了进一步升级,包括文件传输、文件管理等。
Electron 技术框架

为什么要选择 Electron 框架作为 QQ 新的底层架构,这与它在开发中的优势有关。
Electron 它是一个跨平台的,基于 Web 前端技术的桌面 GUI 应用程序开发框架。它允许用户使用 HTML 和 CSS 绘制应用界面,使用 JS 来设计业务逻辑,而且几乎所有的 Web 前端框架都能够运用其中。


至于这个大家比较关心的 Electron应用的内存问题,QQ 团队在外部报道中表示充分细致地针对每种场景进行分析,通过一系列组合优化,包括缓存策略、数据结构深度优化、内存池、Electron 深度定制、UI 层渲染优化等,使内存占用得到较好的控制。
接下我们就对新旧版本在内存占用这块进行相关测试:
应用登录





旧版本应用程序占用内存情况



新版本应用程序占用内存情况

通过测试,发现基本 Electron 技术架构的新版QQ,相较于旧版本,它的主进程数据增加至5个(旧版2个),占用内存119.2MB,增量不是很明显。
传输文件

测试环境

系统:Windows 10
文件大小如下:



旧版本





在线发送



离线发送

新版本




在传输文件方面,新版本对内存的占用也相较于旧版本要好很多。
结语

腾讯 QQ 这次的技术重构升级,不仅提升了用户体验,也给将来打造出更多、更好、适配各类系统平台的 QQ 应用程序提供极大便捷。
此次 Windows / Mac / Linux 三大桌面版本的统一,打破了用户对 QQ 在多端不同的操作壁垒。我们期待腾讯能够在未来不断完善和优化这个全新的架构,为用户带来更好的社交体验。
有兴趣的朋友,可以访问腾讯 QQ 官网,留意近期的公测信息,下载全新的基于 NT 架构下的 Windows 客户端软件,体验一下新版本的功能、界面、风络。
zxhy 发表于 2023-11-4 20:58:43|来自:福建 | 显示全部楼层
说到QQ,你会想起什么?
是那标志性的“咳咳”上线声,还是“唧唧唧唧”的新消息通知声,还是天天挂机升等级?
在我们90后的青春里,一定少不了国民软件QQ,而最近我有幸体验了一把新版公测的Windows QQ,发现了很多惊喜,这绝对是一次重磅更新!
首先来看一下安装包,在安装大小方面,新版Windows QQ比起原来的版本,安装包足足减少了60MB!


安装完成之后,就是登录,这是以前的登录界面:


这是新版QQ的登录界面:
记忆中的QQ主界面它是这样的:


以往我们通过QQ聊天,需要双击联系人,开启一个独立的聊天窗口,当与多个人同时聊天时,需要在多个窗口之间来回切换,非常不便。
而现在,它变成了这样:


这一次,QQ采用了全新的三栏式设计,和微信、钉钉等软件一样,在一个窗口搞定,不用再切来切去,更符合当下我们在电脑上聊天沟通的习惯。
不仅如此,新版的QQ整体设计更加简洁,去除了传统界面上琳琅满目的功能按钮,整体给人年轻、轻便的感觉。
单是界面的改动还不足以称之为重磅更新,最重要的是,这一次,QQ采用了全新的技术架构!


NTQQ!
说到这个NT,熟悉Windows的同学应该不会陌生,微软当年搞Windows时,为了和早期的Windows版本相区分,就提出了一个Windows NT的内核,NT意思就是New Technology,这一次腾讯使用了这个名字,足以看出这不是一次普通的版本更新,更是一次技术架构的自我革命。
大家知道,一直以来,QQ是一款native应用,最大的问题是没法跨平台。在Windows上,一早是用MFC,后来有了DirectUI、WPF等开发技术,但这些东西只能用于Windows平台。在Linux和Mac上,又得使用其他的技术,比如Qt。光是开发团队,就得为三个平台各组建一套,人力成本高不说,软件的更新迭代还很难在所有平台上保持相同的节奏。
而现在,QQ使用了全新的技术架构:Electron!这些问题都将成为历史。
Electron是一种基于Node.js和Chromium构建的开源框架,可以帮助开发者使用Web技术(如HTML、CSS和JavaScript)构建跨平台桌面应用程序。相比于传统的本地应用程序开发,Electron有以下优势:
跨平台:Electron可以在Windows、macOS和Linux等多个平台上运行,因此可以更快速地开发出跨平台的应用程序,而无需为每个平台编写单独的代码。
开发效率高:Electron使用Web技术,开发者可以使用常用的Web开发工具和框架,如React、Angular、Vue等,因此可以快速开发出具有现代化界面和良好交互体验的应用程序。
更新方便:使用Electron开发的应用程序可以轻松进行更新,开发者只需将更新后的代码上传至服务器即可,用户启动应用程序时会自动下载最新版本。
生态系统完善:Electron拥有一个强大的生态系统,提供了大量的扩展和插件,可以方便地实现各种功能,如自动更新、错误报告、调试工具等。
界面优美:Electron可以使用Web技术创建漂亮、响应式的界面,可以使用HTML和CSS自定义应用程序的外观和交互。
因为以上优点,采用Electron技术作为QQ的全新技术架构,可以使得QQ在跨平台支持、开发效率、界面设计、应用程序更新和社区支持等方面都得到了很大的提升。


除此之外,最近几年由于众所周知的原因,国家很多重点单位、企业、高校都对国产化平台的呼声越来越强,有了Electron的技术加持,未来,QQ对国产化平台,对信创的支持都将不再是问题。
不过话说回来,技术方案没有银弹。比起原生的Native QQ可以直接面向操作系统编程,可以做很多极致的优化,大家可能担心Electron相对而言在性能这一块是不是不如之前的技术方案呢?
这个问题对于一般的小公司可能是一个问题,但这可是腾讯啊,腾讯就是靠QQ起家的,对于这个问题不可能不知道,不可能不重视,不可能不解决。
这是QQ团队一位大佬的原话,我摘录在这里:
充分细致地针对每种场景进行分析,再结合定制深度优化Electron和与Native通信层面的优化,内存可以被很好控制,剩下的不过是再把一些内存泄漏的场景找出来而已
不愧是鹅厂,使用新技术架构把功能实现只是基本要求,在此之上,人家还做了很多深度定制化的优化,把Electron的体验做到和Native应用一样流畅丝滑。
就我实际体验来看,我使用了大文件传输、语音视频、远程桌面等非常考验性能的功能,NTQQ都完成的非常出色,让你完全察觉不了这是用Electron技术开发的应用。


在这个过程中,内存占用也不算高,表现比较稳定:




在国产Linux、Mac平台不断崛起的今天,软件跨平台技术方案一定会成为各大软件厂商不得不面对的问题,前有Java虚拟机统一后端服务跨平台问题,现有Electron统一客户端跨平台问题,国民软件QQ迈出了历史性的一步,势必引领国内客户端产品开发的新潮流。
我叫GDB,是一个调试器,程序员通过我可以调试他们编写的软件,分析其中的bug。
作为一个调试器,调试分析是我的看家本领,像是给目标进程设置断点,或者让它单步执行,又或是查看进程中的变量、内存数据、CPU的寄存等等操作,我都手到擒来。
你只要输入对应的命令,我就能帮助你调试你的程序。
我之所以有这些本事,都得归功于一个强大的系统函数,它的名字叫ptrace
long ptrace(
enum __ptrace_request request,
pid_t pid,
void *addr,
void *data
);

不管是开始调试进程,还是下断点、读写进程数据、读写寄存器,我都是通过这个函数来进行,要是没了它,我可就废了。
它的第一个参数是一个枚举型的变量,表示要执行的操作,我支持的调试命令很多都是靠它来实现的:


你可以通过我来启动一个新的进程调试,我会使用fork创建出一个新的子进程,然后在子进程中通过execv来执行你指定的程序。
不过在执行你的程序之前,我会在子进程中调用ptrace函数,然后指定第一个参数为PTRACE_TRACEME,这样一来,我就能监控子进程中发生的事情了,也才能对你指定的程序进行调试。
你也可以让我attach到一个已经运行的进程分析,这样的话,我直接调用ptrace函数,并且指定第一个参数为PTRACE_ATTACH就可以了,然后我就会变成那个进程的父进程。


具体要选择哪种方式来调试,这就看你的需要了。不过不管哪种方式,最终我都会“接管”被调试的进程,它里面发生的各种信号事件我都能得到通知,方便我对它进行调试操作。
软件断点

作为一个调试器,最常用的功能就是给程序下断点了。
你可以通过break命令告诉我,你要在程序的哪个位置添加断点。
当我收到你的命令之后,我会偷偷把被调试进程中那个位置的指令修改为一个0xCC,这是一条特殊指令的CPU机器码——int 3,是x86架构CPU专门用来支持调试的指令。
我的这个修改是偷偷进行的,你如果通过我来查看被调试进程的内存数据,或者在反汇编窗口查看那里的指令,会发现跟之前一样,这其实是我使的障眼法,让你看起来还是原来的数据,实际上已经被我修改过了,你要是不信,你可以另外写个程序来查看那里的数据内容,看看我说的是不是真的。
一旦被调试的进程运行到那个位置,CPU执行这条特殊的指令时,会陷入内核态,然后取出中断描述符表IDT中的3号表项中的处理函数来执行。
IDT中的内容,操作系统一启动早就安排好了,所以系统内核会拿到CPU的执行权,随后内核会发送一个SIGTRAP信号给到被调试的进程。


而因为我的存在,这个信号会被我截获,我收到以后会检查一下是不是程序员之前下的断点,如果是的话,就会显示断点触发了,然后等待程序员的下一步指示。
在没有下一步指示之前,被调试的进程都不会进入就绪队列被调度执行。
直到你使用continue命令告诉我继续,我再偷偷把替换成int 3的指令恢复,然后我再次调用ptrace函数告诉操作系统让它继续运行。
这就是我给程序下断点的秘密。
不知道你有没有发现一个问题,当我把替换的指令恢复后让它继续运行,以后就再也不会中断在这里了,可程序员并没有撤销这个断点,而是希望每次执行到这里都能中断,这可怎么办呢?
我有一个非常巧妙的办法,就是让它单步执行,只执行一条指令,然后又会中断到我这里,但这时候我并不会通知程序员,而仅仅是把刚才恢复的断点又给打上(替换指令),然后就继续运行。这一切都发生的神不知鬼不觉,程序员根本察觉不到。
单步调试

说到单步执行,应该算是程序员调试程序的时候除了下断点之外最常见的操作了,每一次只让被调试的进程运行一条指令,这样方便跟踪排查问题。
你可能很好奇我是如何让它单步执行的呢?
单步执行的实现可比下断点简单多了,我不用去修改被调试进程内存中的指令,只需要调用ptrace函数,传递一个PTRACE_SINGLESTEP参数就行了,操作系统会自动把它设置为单步执行的模式。
我也很好奇操作系统是怎么办到的,就去打听了一下。
原来x86架构CPU有一个标志寄存器,名叫eflags,它里面不止包含了程序运行的一些状态,还有一些工作模式的设定。


其中就有一个TF标记,用来告诉CPU进入单步执行模式,只要把这个标记为设置为1,CPU每执行一条指令,就会触发一次调试异常,调试异常的向量号是1,所以触发的时候,都会取出IDT中的1号表项中的处理函数来执行。
接下来的事情就跟命中断点差不多了,我会截获到内核发给被调试进程的SIGTRAP信号,然后等待程序员的下一步指令。
如果你继续进行单步调试,那我便继续重复这个过程。
如果你有程序的源代码,你还可以进行源码级别的单步调试,不过这里的单步就指的是源代码中的一行了。
这种情况下要稍微麻烦一点,我还要分析出每一行代码对应的指令有哪些,然后用上面说的单步执行指令的方法,一条条指令快速掠过,直到这一行代码对应的指令都执行完成。
内存断点

有的时候,直接给程序中代码的位置下断点并不能包治百病。比如程序员发现某个内存地址的内容老是莫名其妙被修改,想知道到底是哪个函数干的,这时候连地址都没有,根本没法下断点。
单步执行也不行,那么多条指令,得执行到猴年马月去才能找到?
不用担心,我可以帮你解决这个烦恼。
你可以通过watch命令告诉我,让我监视被调试进程中某个内存地址的数据变化,一旦发现被修改,我都会把它给停下来报告给你。
猜猜我是如何做到的呢?
我可以用单步执行的方式,每执行一步,就检查一下内容有没有没修改,一旦发现就停下来通知你们程序员。
不过这种方式实在是太麻烦了,会严重拖垮被调试进程的性能。
好在x86架构的CPU提供了硬件断点的能力,帮我解决了大问题。
在x86架构CPU的内部内置了一组调试寄存器,从DR0到DR7,总共8个。通过在DR0-DR3中设置要监控的内存地址,然后在DR7中设置要监控的模式,是读还是写,剩下的交给CPU就好了。


CPU执行的时候,一旦发现有符合调试寄存器中设置的情况发生时,就会产生调试异常,然后取出IDT中的1号表项中的处理函数来执行,接下来的事情就跟单步调试产生的异常差不多了。
CPU内部依靠硬件电路来完成监控,可比我们软件一条一条的检查快多了!
现在,你不止可以使用watch命令来监控内存被修改,还可以使用rwatch、awatch命令来告诉我去监控内存被读或者被写。
好了,这一期的故事就讲到这里了,如果你想查看更多未发布过的新鲜又有趣的技术小故事,可以扫描下方二维码购买我最新出版的《趣话计算机底层技术》图书。书中用一个个的小故事系统性的讲解了计算机底层技术的基本原理,以及如何运用他们解决日常工作中的各种实际问题。

heyond 发表于 2023-11-4 20:59:15|来自:福建 | 显示全部楼层
QQ 在上个世纪是 PC 上的即时消息客户端。
21 世纪的 23 年, 俺发现没有手机就用不了 QQ。
于是俺安装了 QQ 以后, 又把它删除了。
因为它根本就不打算让俺登录。

本以为找个手机可以登录, 谁知道竟然不行。
还要 (1) “拿出原来使用的手机”“确保该手机已登录 QQ号: XXXXXXXX ”
(2)打开手机 QQ 扫描二维码

俺忍不住爆粗口了你知道吗?




过去的卅卌年,
俺就没见过这么
自绝于网民的一款网络应用。




ymabianzi 发表于 2023-11-4 20:59:33|来自:福建 | 显示全部楼层
我大概在 12 月 8 日左右正式使用了基于 Electron 的 QQ,那时候是 3.0.0-565 版本。后来又提示有新版,直到发表本文之前我才抽空将 QQ 升级到了最新的 3.0.0-571 版本。
我的系统环境

我常用的系统是 NixOS,不是常见的 deb 或 rpm 系。在 NixOS 上是不能运行其它来源的二进制包的,这跟安装包格式无关。因为 NixOS 是一种特殊的不遵循 FHS 的 Linux 发行版,想在它上面运行来自 FHS 环境编译的二进制需要经过修补或者创建虚拟 FHS 环境等手段。好在腾讯官方提供了 AppImage 包,NixOS 对 AppImage 的包进行重打包和安装还是很容易的。
我记得知乎上以前关于 Linux QQ 讨论中,总有新手说 Linux 发行版各种各样,不可能都出一个版本。这当然是错的,理论上你可以把官方提供的二进制弄到各种发行版上运行,取决于是否存在有经验的用户帮你重新打包而已。
我的桌面

我用的 KDE(Plasma)桌面。
因为在 KDE 上 CSD 窗口是不显示阴影的,CSD (Client-side decoration) 就是客户端程序自行绘制窗口装饰(边框和边框上的东西)。而 QQ 的主面板就是 CSD 窗口,所以很遗憾 QQ 在我这边是没有窗口阴影的。
可以看到 QQ 的最小化/最大化/关闭在右边,这并非我的桌面窗口管理器的风格,因为这是 QQ 自行绘制的。


但是在 QQ 的部分其它窗口中,因为使用原生窗口装饰,是有阴影的。


某种程度上,没有阴影的窗口会显得尴尬。虽然看久了也没什么问题。如果能提供设置选项,让用户可以设置回原生窗口风格那就更好了。
在 QQ 中打开任何链接,都会弹出 KIO 客户端的警告。


遗憾的是,在我这边点击「继续」并不会打开 Chrome 窗口。这导致我不得不每次都是复制消息中的链接,再粘贴到浏览器。
这可能是 QQ 的 bug,也可能是我本地环境的 bug。待我有时间会继续确认。不过从这里也能看出来开发人员是具有一定的 Linux 应用开发经验的,使用 KIO 打开链接会让桌面自己处理协议和决定启动的软件(浏览器),而非写死的用某个浏览器来打开。
基本功能

这个 QQ 可以用密码登录,但是点击「登录」后,仍然要在手机二次确认。: (


点击主面板左侧的 QQ 空间大图标,会弹出一个独立的窗口显示 QQ 空间,而非使用浏览器。


这也算 Electron 的优势了吧。毕竟你不需要再嵌入浏览器,也不用顾及本地浏览器的兼容性,直接用 Electron 的窗口来打开空间链接。
不支持皮肤功能,但设置里边可以选择白天/黑夜两种外观模式,以及跟随系统。


皮肤无所谓,支持黑夜模式也算用心了吧,给个好评。
有跟 Windows 版本差不多的全局搜索能力。除了好友,文件之外,本地存在的聊天记录都可以搜出来。


有截图功能,截图有带有划线、马赛克等工具。上面图片的马赛克用的就是 QQ 的截图,下面的箭头也是。


给截图设置快捷键也没什么问题。但是另外两个默认快捷键在我这边无效,应该是冲突了,我修改后可以正常使用。这里应该有检测到冲突的提醒,或者提示如果无效可能存在冲突。
一些其它功能

  • 支持查看群文件、群相册,以独立窗口的形式。
  • 可以修改群的各种免打扰方式,可以置顶群,可修改群昵称。
  • 有群通知(加群)/好友通知(加好友)的历史记录。
  • 有邮箱入口,会启动浏览器,由于 bug 我这边打不开。
隐藏 QQ 窗口
比较奇怪的是,QQ 主面板的关闭按钮和最小化是一样的效果。我个人的习惯是,关闭会隐藏 QQ 主面板,最小化就是正常的最小化。所以我无法理解关闭按钮这样设计的原因,如果能设置关闭为隐藏主面板那就更好了。
目前,你只能通过快捷键来隐藏/显示 QQ 主面板。
内存占用

在登录一个 QQ 号时,QQ 会启动 7 个左右的进程。启动新的独立窗口后可能会产生新的进程。


加起来占用 588MB 左右的内存。如果是 Discord 的话:


虽然进程更多,但合计占用是 560MB,略低一点点。Discord 的界面比 QQ 要复杂一些,并且在我这边 Discord 显示的内容多很多,因为服务器/消息太多了。
如果是 VS Code 的话,进程更是多太多了。


但是占用并没有明显升高。当然 VS Code 还有扩展会占用内存,但这不影响证明 Electron 是否有继续优化的空间。
所以我认为 QQ 还是有继续优化内存占用的可能的。QQ团队在另一知乎问题下表示“针对每种场景进行分析,再结合定制深度优化Electron和与Native通信层面的优化,内存可以被很好控制”。好像很有信心……
当然,相比于内存占用,其实 Electron 程序在响应速度和界面的过渡上优化空间很大(例如 Discord),在启动速度上同样有很大的优化空间(例如 VS Code)。
结束语

我是这么看 Electron QQ 的前途的,如果腾讯能让这个版本的 QQ 在除 Linux 以外的平台使用(例如 Mac 和 Windows),我想这个软件的寿命会很长。因为开发成本的降低,对于企业还是很看重的,即使是腾讯/阿里这样不缺人的大公司也很在意呢,毕竟他们好像一向不喜欢对小用户群体投入精力。
并且随着开发人员经验的累计,优化的深入,没道理会跟其它某些版本一样被放弃维护。我反正期待这个 QQ 登录其它平台。
我知道很多人讨厌 Electron,其实我作为 Linux 用户,倒是并不讨厌它……
旅顺的海 发表于 2023-11-4 20:59:47|来自:福建 | 显示全部楼层
前言

这是我第二次回答关于腾讯QQ的问题了,上一次是三年多前,2019年的10月,那时候腾讯发布了阔别已久的Linux版QQ 2.0。我第一时间试用了一下,并简单作了如下的评价:
如何评价 10 月 24 日腾讯新发布的 QQ for Linux?时隔三年,腾讯终于推出了又一个大版本的更新——3.0版的linuxqq。而且听说腾讯这次对QQ的桌面版软件做了整个架构的调整和升级,还起了个名字较QQ NT,这里面的"NT"我查了一下,就是和当初Windows NT中的NT一个意思,“New Technoly”或“New Technology”。总之就是“新技术”的意思。
那么问题来了,这个“新技术”是什么呢?其中一个改变就是基于Electron开发,Electron这个东西大家可能听着不熟悉,但是提另一个和它有关系的项目大家可能知道的多一些,那就是Atom。而这个Electron项目的前身就是Atom Shell,基于Node.js和Chromium实现跨平台的桌面GUI应用程序开发。它的特点造成它非常适合开发社交通信类的软件,开发起来一般比纯用C++之类的语言开发要容易很多,但是开发出来的软件包一般体积比较大(不过现在的软件包体积都够大的,不大很多人反而觉得没东西;)。
当然这个新技术肯定是不止基于Electron这么简单,因为他们的目的是想将多个平台上的桌面QQ统一,不再单独开发差异巨大的代码(当然地层肯定还是会有差异性的代码),对上提供多平台都统一的接口,真正实现跨平台。不过本问题关注Linux下的QQ,下面我们先就着重看看这个新版的Linux QQ究竟会给我们带来什么“惊喜”。
试用

我现在有一个Fedora 35的测试系统,KDE的桌面环境,我就不重新装系统了,就用这个环境来简单试用一下吧。
安装

我是通过下面这个链接下载的linuxqq:
QQ Linux版-新不止步·乐不设限

可以看到当前支持两个体系结构,除了常见的x86_64体系结构外,还支持最近较火的arm64结构的电脑,而且每个体系结构都贴心的准备了.rpm和.deb安装包可供下载,还有appimage可以选择。
我选择了.rpm包,下载后安装过程如下:


可以看到包的大小确实不小,有103M。上次2.0版本的时候我记得只有11M左右。所以就像我开始时说的,基于Electron开发的一个特点就是“大”。可能大小扩大了10倍你会觉得有10倍于原来的功能,这个应该不会,但应该还是会有很多增强。我比较看好这次能提供的功能。
言归正传,这次安装没有碰到任何阻碍,上次还碰到一两个依赖缺失的情况,这次则直接装上了。装上后可以看到QQ的图标:


当然在命令行直接通过"qq"命令也可以启动。这次的linuxqq-3.0.0有很多安装文件,在Fedora上安装位置集中在/opt/QQ/目录下:
/opt/QQ/LICENSE.electron.txt
/opt/QQ/LICENSES.chromium.html
/opt/QQ/chrome-sandbox
/opt/QQ/chrome_100_percent.pak
/opt/QQ/chrome_200_percent.pak
/opt/QQ/chrome_crashpad_handler
/opt/QQ/icudtl.dat
/opt/QQ/libEGL.so
/opt/QQ/libGLESv2.so
/opt/QQ/libffmpeg.so
/opt/QQ/libvk_swiftshader.so
/opt/QQ/libvulkan.so.1
/opt/QQ/locales/af.pak
...
...
/opt/QQ/locales/zh-CN.pak
/opt/QQ/locales/zh-TW.pak
/opt/QQ/qq
/opt/QQ/resources.pak
/opt/QQ/resources/app/512x512.png
/opt/QQ/resources/app/796.preload.js
/opt/QQ/resources/app/929.preload.js
...
/opt/QQ/resources/app/wrapper.node
/opt/QQ/snapshot_blob.bin
/opt/QQ/v8_context_snapshot.bin
/opt/QQ/vk_swiftshader_icd.json
/usr/lib/.build-id
/usr/lib/.build-id/17
/usr/lib/.build-id/17/0d8ee496872721cc26b67760236fb2c4c0c862
...
/usr/lib/.build-id/b4/f0f52ff5768c02be6905d03c2e6336e268832a
/usr/lib/.build-id/f8
/usr/lib/.build-id/f8/06fecb93d544ed61938041e170b055b7998928
/usr/share/applications/qq.desktop
/usr/share/icons/hicolor/2x2/apps/qq.png
/usr/share/icons/hicolor/512x512/apps/qq.png文件太多就不一一列出来了,如果都列出来的话可以看到很多js文件。如果对比2.0版本的时候的文件列表:
$ sudo rpm -ivh linuxqq_2.0.0-b1-1024_x86_64.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:linuxqq-2.0.0-b1                 ################################# [100%]

$ rpm -ql linuxqq
/usr/share/applications/qq.desktop
/usr/share/tencent-qq
/usr/share/tencent-qq/crashpad_handler
/usr/share/tencent-qq/qq
/usr/share/tencent-qq/qq.bmp
/usr/share/tencent-qq/qq.png
/usr/share/tencent-qq/res.db
/usr/share/tencent-qq/qq不难看出基于Electron后开发过程和结果的变化 (更多对比可看我最开始贴出来的上次介绍2.0版本的链接)。
最后在/usr/bin下面用一个符号链接指向/opt/QQ/qq:
$ ls -l /usr/bin/qq
lrwxrwxrwx. 1 root root 10 Jan  5 16:37 /usr/bin/qq -> /opt/QQ/qq所以我们可以直接通过"qq"命令来启动QQ。
启动&登陆

启动后就看到了这个界面:
但是吸取了上次被吐槽的“只能扫描登陆”的不友好,这次更新后贴心的支持了账户密码登陆:


当然,像在windows上登陆差不多,很多时候要手机确认……


不过这无伤大雅,登陆进去后我们来简单的看一下功能。
聊天功能

QQ最基本的功能就是“聊天”,我简单测试了一下,发文字发表情发动图都每问题,信息会和手机同步,而且表情和动图都可以动起来:


从手机上给linuxqq发一些动态的表情和图片也可以实时的展示,和在手机上看到的没有差别:


而且这次支持的表情很全,超级表情等都有,且都正常工作:


而且自己收藏的表情也都同步进来了,GIF图也可以正常使用:


做到这样聊天功能可以说挺完善了,毕竟在Linux上用QQ的人大部分人都是工作学习时使用。再来看看辅助工作学习的功能——文件传输和图片发送:


测试了普通文件、图片和视频,都可以正常发送,视频还能直接下载查看。
截图功能

很多人可能喜欢用QQ的截图功能,这次版本也是支持此功能的,如下图:


虽然GNU/Linux也有很多截图软件,比如shutter。但是QQ自带的截图功能在使用QQ聊天时更加方便快捷。
聊天记录

值得注意的是“聊天记录”功能。点击聊天窗口的右下角时钟图标可以打开聊天记录,还可以搜索关键字,或按类查看:


不过对个人隐私比较在意的用户最好注意聊天记录的清理:)
群功能:

用QQ工作学习的话,自然少不了QQ群的使用。QQ群支持上面单人聊天那样所有的功能,另外群资料分享时不可或缺的“群文件”和“群相册”功能也都能工作。


在群的管理设置方面也支持如:发布公告、修改昵称、增减成员等操作:






其它功能:

除了上述基本功能的支持以外,可以看到界面左侧还有两个“QQ空间”和“QQ小世界”的功能,我以为是摆设,没想到点开之后能正常使用:


当然我还是遇到了一点报错,不过不是很严重,没有导致窗口或程序崩溃:


这个"QQ小世界"的功能是个短视频功能,看来腾讯为了推广自己的短视频平台也是下了功夫,都推到Linux这边来了。这个功能打开后视频可以直接播放,也有声音(在办公室点开时要小心):


而“邮件”那个按钮则直接以当前账号打开浏览器访问http://mail.qq.com:


最后还有QQ的设置功能,比如更改主题颜色:


更多支持的设置选项如下,就不一一尝试了:






评价

使用评价

整体功能来看,我觉得这次3.0版本的表现还是不错的,稳定性和性能都还可以。鉴于QQ在Linux系统上一直以来的历史进程,我觉得能做到现在这样已经算很可以了。我个人觉得这比用wine+windowsQQ要好,毕竟是原生的,而且腾讯既然表示要通过QQ NT来做到跨平台,那说明后续对linuxqq的支持可能会更多更好一些(相较于以前)。所以我个人推荐工作中离不开QQ的人可以从此版本开始使用(毕竟也是免费的)。
关于Deepin?

我看到有人觉得腾讯推出新的linuxqq会打击到deepin系统,我不知道这个的逻辑点在哪里。除非腾讯明确限定不许deepin原生携带linuxqq发布,也不许deepin的软件库里带linuxqq的包。但是即便这样,用户也可以在安装了系统后自行安装linuxqq。而且我个人觉得腾讯应该没有必要和deepin过不去,他开发出linuxqq就是为了推广使用的,如果系统厂商愿意原始绑定安装,那不是更好么。这件事本身对于国产Linux系统是一个利好。所以担心Deepin的人我不知道是不是有什么内部消息,还是纯粹想多了。况且在Deepin的软件库中原生携带不携带一个linuxqq的包,并不会有太大的影响。
新版linuxqq的展望

最后聊一下腾讯为什么要做这个linuxqq 3.0,而且还是基于新框架重写的。在开头我已经说过了,有消息指出腾讯打算做桌面版QQ的新架构调整(QQ NT),虽然我们还不了解其细节(商业闭源软件),但是实现多平台代码的统一是一个好的想法,作为一个在软件行业从事多年的工程师,我非常理解腾讯这样的决定。如果我是项目经理,我也会非常想推动这个方案的实施。而Linux QQ是一个非常好的试验场,因为在Linux上桌面QQ在人们看来一直都处于开发状态,如果有重大的调整也不会造成重大的regression问题(用户恐慌)。甚至可能会有多个跨平台方案在进行,而现在这个基于Electron的方案可能是目前脱颖而出的一个。这完全有可能,也非常符合软件开发的(特别是大公司软件开发)的常规做法。就是不断会有新的技术原型在做,然后也总会有新的方案脱颖而出。
我知道很多人可能会嘲笑腾讯这么多年才弄一个大版本更新,确实可能没多少人做Linux版的QQ,毕竟这不是腾讯的主营业务中的项目,也带不来什么收益。但是这却是一个值得尝试做下去的项目。我们都知道目前国际形式很微妙,国家势必会更大力度的推进国产系统的进程。而目前可用的系统自然首选的就是"国配Linux系统"。抛开Linux擅长的服务器领域不谈,在桌面领域的话如果有腾讯的支持,势必会让基于Linux系统的国产办公环境有更大的改善。上面我也试用了很多即时通信、群组通信和管理、文件共享收发等功能,这就是办公所需要的。即便有人认为就这点功能还远远不够大型的企业应用,是的,但总要有人去做这方面的技术和经验积累。实验过的技术框架可以在将来提供更多的技术参考。
而且现在随着QQ NT的推动,对Linux QQ和国内Linux用户绝对是一件好事。因为如果实现了跨平台的代码,那么Linux QQ项目可能就不再像以前那样单打独斗了。就会从诸如Windows QQ这样的项目中分得一杯羹,得到更多的照顾。如果QQ这个跨平台的愿景能够实现,那么就可以推广到腾讯的其它产品上,比如腾讯会议、腾讯视频、甚至腾讯游戏、微信等等。不要小看这巨大的潜力,比如将来国家打算彻底替换国企事业单位等员工的办公环境,彻底换成Linux系统。那到时候大量的竞标必然会出现,不管是凭借linuxqq还是其它软件,这种已有的技术积累和成果会起到很大的作用。机会是留给有准备的人的,所以这种准备是值得的。一旦Linux桌面市场这个蛋糕可分的时候,就可以抢占其他人的先机。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则