百科问答小站 logo
百科问答小站 font logo



《黑神话:悟空》上线时有可能达到《艾尔登法环》的高度吗? 第1页

     

user avatar   ren-sen-ru-ci 网友的相关建议: 
      

先把暴论写在前面:

如果游戏科学把黑神话悟空所有的画饼全部实现了。

对不起,魂系集大成的老头环将会不配和它比较。


是不是说得太过头了?

因为游科画的饼就是这么大——一个体量超过同类大中型游戏,美术建模超越第八世代末第九世代初期所有大型游戏,核心怪物交互系统还试图做出超越现有游戏框架设计的同时,还试图用3-4亿人民币的成本,5年做出成品的游戏。

好家伙,把圣莫尼卡/R星/顽皮狗等一流工作室的核心竞争力方向全部表现出来了,还比他们省钱省时。

在这个前提下,我几乎可以确定黑神话悟空在上面的某些方向会省掉一些内容,或者把准备内容放在下一部游戏里再实现。

冯骥最近在知乎提过一个问题,后来又有了恶搞向的虎年贺岁视频,个人猜测是团队在内容取舍上面出现了一些分歧,需要调整以及压低玩家对游戏成品的预期。

那么黑神话悟空把自己的饼完成了多少直接决定了游戏最终的品质。

最终媒体均分要是能达到80分,作为一个公司的新产品方向,面对巨大的市场困难还迎难而上,它就已经赢了,不要对它的期待过高。


其实,我对内容的成品完成度是谨慎乐观的。

相比而言,我更担心工期,我是觉得我可能玩不到这个游戏或者到时候已经没有能力去玩了。我2021年1月确诊重病的时候,医生明确告诉我,我的情况大数据的中位数生存期是33-36个月。

按照游科2018年的制定的制作计划,最早的发行时间预估是2023年秋,经过更换引擎,团队调整,技术积累的时间,跳票的可能性极大。

所以,我只能说——加油,游科!



发一个很难但是很多观众没意识到的饼吧,以下冯骥原文:

你玩过《最后生还者:第二部》吧?那个游戏我玩了之后很绝望……你有没有注意到里面人物的动作?比如我坐在这儿,游戏提示你按个键,你把一个东西拿起来——不管你在哪儿,是正对着东西还是侧对着东西,动作都特别自然?
我们最早以为就是多捕捉几个动作,后来发现角色的朝向,尤其是脚的朝向非常微妙,如果只做正面的动作,那东西在侧面怎么办?要不要转一下方向?但平滑转身没有素材,靠程序融合又很怪——想达到不别扭也有办法,比如说暴力破解,我做32个动作,就为了拿这把刀,所有方向都尽量考虑到。但你在游戏里不只要拿刀,还要开门,还要拿锤。所有的动作都要乘以32的话,无论制作成本还是资源量都是不可接受的。
我们就去研究怎么办,看大厂商在GDC发表过的公开演讲。之后我们发现育碧提出过一个解决方案,就是“Motion Matching”(运动数据匹配)。这个技术最强大的地方在于,我们只需要按照一套规则录制一批人物基础运动动画数据,然后不需要任何动画师的修剪,Motion Matching就可以自动帮你产出一整套流畅自然的人物运动。
网上有一些开源版本,但非常不成熟。我们将它做到了产品级……我们反推了育碧的各种方案细节,有些地方育碧没透露具体实现方式,我们也想办法做出来了,比如到底按什么规范去设计整套动作,怎么支持一些奇形怪状的行走动画……”冯骥说,“但是如果去对比《刺客信条:奥德赛》,或者再牛×点儿,对标《战神》或者《最后生还者》,你会发现你就是不如它。他们的基础动作库和对应的数学算法对于你来说就是个黑盒。但这同时也是他们的护城河。

相信有游戏设计概念的人都知道,做出这样一个方案放进一个动作系统内容(尤其是与怪物交互)占比极大的游戏中,是个什么级别的技术难度。

魂系游戏一直都是基本完全放弃这个方面的,在这个方向上“投机取巧”——利用场景,美术特效,音乐效果,玩家心理设计遮盖整个动作框架的僵硬。

这是一个很好的思路

但是,再引用一段采访原文吧:

如果我们去对标一个非常具体的产品的时候……你就天然可能会变成一个二流的游戏。就算你可以致敬得很好,但天然就会让玩家觉得你是个二流游戏。

不理解这个技术的难点吗?

不提老的动作游戏,因为当年的技术限制导致不可能往这个方向上处理。


1.只狼:

遮盖。

只狼在碰到任意方向攻击时动画效果是如何处理的?

这是战斗有碰撞交互的动作游戏的一直以来的老做法,其实绝大部分以前的日式动作游戏都是这么做的,但只狼处理得特别漂亮。

拿只狼的弹刀为例:

只狼所有可弹刀技能的撞击判定点是一个范围,而不是真正的武器模型精准碰撞,很明显位置是不准确的,但是为了让实际效果更像那么回事,FS在武器碰撞的时候做了一个撞击火花特效,遮住了模型。同时只狼几乎所有的可格挡技能全部都在主角的中区位置,几乎所有可踩塔技能的武器位置都在主角的腿部。(最后一句话看着像废话,但其实隐含了很多日本厂家的设计思路,就是不去死磕写实,而是先框好一个规则的框架,然后在设计时尽量避免超越框架,反正玩家学习后是要必须要接受这个框架的。)


2.FS自家的魂游戏(包括老头环):

完全无视。

因为大部分玩家在玩的时候关注点完全不在这个上面,玩家的注意力都在场景/美术特效/音乐效果或者紧张的心态中。


3.仁王:

基本无视。

慢镜头下只狼的动作比仁王“好看”很多。


4.神海4/美末2:

这类过于电影化的游戏,写实成为了一个很重要的影响因素,所以特别明显。

神海4的抓取动作依旧是做不管是否摸到物品的模型,只要判定为正在拾取,物品就会“消失”变到身上。

到了美末2,这个技术就已经几乎应用上了,上面说过的话不再重复。


5.新战神

说实话,我忘记了....


6.怪物猎人:世界/崛起:

无视。


7.古墓丽影暗影:

无视。

甚至处决动画都是切换成播片。


8.刺客信条起源/奥德赛/英灵殿:

自动化工具处理,上面说到了。

刺客信条主要其实体现在爬墙和跳跃(尤其是跳一个窄点台或者栏杆)的动作判定上,战斗的效果当然也是自动化处理的,所以很搞笑的就是经常出现判定的错位BUG。

看了之后,你会发现没有一款以战斗为主的游戏试图应用这个技术方向,这个饼大不大?所以游科说到这个时候的,我被吓到了。

实际上后来,游科有一个转竹子的BUG视频,显示了可能他们并不是准备完全死磕它,因为视频里面砍竹子的点和竹子断开的点不是一个位置。

这个技术看起来很没有意义对吧?

意义在于战未来,这个技术如果低成本下放到更多游戏里面意义会很大,但是目前除了美末2真正用得相当不错以外,没看到什么有意义的作品出来。

这也是我为什么看好游科,游科的一系列行为显示了他们是相对比较务实的在推进产品,只是极大概率时间不够。

再快一点吧。


如果还有人认为:游戏技术就是指纯美工/纯建模之类的和他们自己定义的”游戏性“无关的内容,而游戏的”游戏性“全靠创意的。

甚至还有人说艾尔登法环是靠创意堆出来的游戏,我真的无话可说,你们随意就好。

实际上,艾尔登法环和创意这个词完全不沾边,纯粹的用旧技术的数据库迭代出来的产品,这套完整的数据才是FS的护城河,它们使得FS能在不大幅度降低游戏体验的情况下,能做到高效率生产大量设计内容,让他们可以实现成本不溢出的情况下,堆料堆出开放世界。

但是,估计在你们眼里,牛逼游戏=牛逼的创意+随便拉个程序员



补充一句,非黑即白的二元逻辑真的人别评论了。

老头环也不是靠什么手感,养成,数值成功的。

(真有人觉得老头环的这三个很好吗?魂的手感一直烂,老头环有微调,进步了一点点,养成系统的设计很普通,魂的数值一直非常优秀,但是老头环的数值水平非常一般。)

这三个东西,说真的,国内一些优秀的工作室想超越老头环根本不困难,因为老头环的标准实在是不够高。

国内做大型游戏不行从来不是因为玩法设计这方面很差,而是整合能力的差距,玩法设计太多人能异想天开,其中不乏天才创意,但大型游戏的关键是

每个细分系统团队的执行力和整个制作团队的整合能力。

黑神话悟空之所以不做什么开放世界,也不做什么无缝大地图,就是要死磕战斗系统呈现和美术效果,这说明游科的目标是基本明确的。

所以黑神话悟空是准备,做个线性关卡下,boss数量极多,战斗玩法丰富,美术极佳的游戏,避开箱庭设计这个国内弱项。

这个游戏上限(画饼)高在哪里?

请问,新战神设计了几个boss几种怪物?

黑神话悟空公布了100多种怪物(魂系的小怪数量也有,三位数,但设计有很多凑数),光建模完成(不包括后面也许还有补充的)的boss数量就超过了黑魂3。

请问,新战神设计了几种武器的动作形态?

黑神话悟空有变身系统……

请问,新战神是上世代的游戏,要兼容2013年的初版PS4,它的美术建模是顶级的吗?

黑神话悟空的美术,没瞎都能看出来非常夸张,要是懂一点更会觉得离谱——云雾的粒子效果,棍子和落叶的交互,火焰效果。

黑神话悟空完全理想化的结果是——不是开放世界,镜头设计略输但战斗系统、美术、可游玩boss数量都大幅度超越新战神的游戏。

你们真的不能理解这是什么怪物级别的游戏吗?

我再次强调,这是上限,我也不认为游科能达到,但这个饼真大得离谱。


还有一堆提2077的,我直接把我对2077的预判砸你们脸上。

真就年轻人第一部全价3A?

2077这个游戏从宣发到发售,从来没有任何一部预告片能看出什么实质性内容。

他们的预告片内容压缩一下只有:我堆了这个料,好看吧?

然后没了……

我当时都不理解为什么会有人能从预告片中看出2077是个神作。


user avatar   fu-chou-zhe-16-45 网友的相关建议: 
      

年一游是吧…

黑神话怎么看都是对标鬼泣这类游戏的。

怎么能拿魂系来说话呢?


user avatar   si-wang-54 网友的相关建议: 
      

我记得这个问题好像当年只狼发售时候就有。


其实黑神话悟空只要保证demo的质量不下降的太厉害,且可以在年内发售,就已经可以封神了。


user avatar   hu-jun-34 网友的相关建议: 
      

宫崎英高代表作:《恶魔之魂》《黑暗之魂》《只狼》《血源诅咒》《艾尔登法环》,个个是极品,甚至凭着独特的风格开辟了“魂系”的全新类型的游戏。

FromSoftware作品:自1994年的《国王密令》开始到《艾尔登法环》共64个作品。

再来看看黑神话的制作人与公司代表作

冯冀代表作:《斗战神》《战争艺术:赤潮》个个是失败作。前者吃着腾讯的顶级研发、宣传资源,在前期拼出了在线最高人数60w的优秀成绩,可惜后期急于变现死掉,算半个失败品;后者彻彻底底就是个垃圾网游,前期是个不温不火的rts,后期急于变现抄袭自走棋死掉,在游戏质量、市场业绩都是个全方位垃圾。

游戏科学作品:《百将行》《战争艺术:赤潮》共2个作品。

一边是出了一个换皮手游和一个垃圾网游,并在新游戏雏形刚出没多久,连个demo都没的情况下就急于变现发视频搞宣传的三流小作坊与一个每部作品都急于变现的优秀游戏制作人从零开发的有着中国情怀式IP和优秀的宣发能力并妄想凭此一部就跻身进入3A界的试验品,

一边是勤勤恳恳开发了64个精品游戏的老字号游戏公司与创立了“魂系”的世界顶级游戏制作人深度合作厚积薄发的近满分的顶级大作。

把它们放在一起比,是对宫崎英高先生与FromSoftware的莫大侮辱,是对各大游戏评测媒体的藐视,更是对所有3A单机游戏的亵渎。




ign.com.cn/elden-ring/3

FromSoftware - 萌娘百科 万物皆可萌的百科全书

zh.wikipedia.org/wiki/%


user avatar   li-zhi-lun-38 网友的相关建议: 
      

我在玩神力科莎竞速的时候就发现了这个问题,传媒时代偏难偏硬核一点的游戏往往更容易获得口碑,

因为当叙事层面无法有大成就,所用引擎和游戏质感趋同,和美末1战神4那种电影质感的叙述有差距的情况下,适当增加难度几乎是唯一解。

玩家会从对游戏的评价上转移注意力,变成“不愿意承认自己菜”,

只狼和艾尔登法环就是例子,

魂系游戏在网络不太发达,尤其是直播和短视频不多的时候,是小众的一类东西,是大神们的自留地,

就和小时候看街机厅里那些一个币通三国战纪和圆桌骑士的牛人差不多,

技术成了审美门槛。

而到了现在,云通关的玩家何其多,这部分“白嫖党”的如果产生了“我上我也行”的感觉,进而对这游戏本身的故事和体验进行云评测,则厂商不仅赚不到这帮人的钱,还得白挨逼逼。

如果黑神话调不好难度,

很容易就跟嗜血印之类的游戏一个下场,缺点都显而易见,游玩的门槛又太低,改成黄油又对不起体量根本收不回来成本,

最后就成了软柿子,谁都可以来白捏两下,没人花钱入,当然就热度一过就凉凉。

光靠西游记的路人缘就怕没后劲,

估计也是传闻内部产生了关于玩法上的巨大分歧的原因之一。

作为纯纯的外行路人,我倒觉得西游记本身在叙事上玩不出什么花来,按照黑神话最开始流出的东西,似乎主角是一个孙悟空的门徒之类的角色,

要么转世要么找回力量,这个设定其实挺讨喜的,也符合游戏从开始弱鸡到后来慢慢变强的主线,

众所周知无双割草类现在式微到不行,鬼泣销量也不好了,

那不如一步到位推到魂系的难度,再在特殊的段落加上“封印解除”或者“本尊附体”“大号账号找回啦”这种爽点,

对玩家一摊手表示,你看,不是我们制作组纯心想虐你,而是你太菜根本打不到爽的那一part,

这样手不残的玩家会自动站队骂云玩家人菜还爱逼逼,

不失为一个维护口碑又保持游戏后劲的好办法。

当然一切的前提就是,起码做出一个只狼同等的完成度,手感稀烂还难得一p就是自寻死路了。


user avatar   cheng-bu-tang-long-yi-21 网友的相关建议: 
      

知道什么是自信吗?发售之前几乎没对游戏精彩部分有任何宣传,所有预告、播片和试玩90%以上的内容都是做得最拉胯的新手村,甚至连新手村的史东城都藏着掖着。上线后连续10天steam峰值在线在80万左右,昨天更是超过了95万,但FS社仍然没有做任何营销。“我把游戏做大做好了,你来玩就成了,保证好玩”。

而黑神话悟空让我感觉很没底。他们放的预告和演示越多,我就越觉得没底。因为上一个这么宣发的游戏是2077。

当然,如果他们做到2077的水平,我就心满意足了。但即使是2077,也是在三代猎魔人的技术积累下完成的。我到现在没见过任何一个厂商,做出来的首个主机游戏就是3A水准。游戏科学连试水的作品都没有,以前是做卡牌手游的,一下子就要做体量如此巨大的游戏,我觉得成功几率不超过20%。。


以上是原回答。看到很多人质疑我说法环宣发不少,那我只能告诉你,它第一个实机预告是去年的E3,也就是发售半年前。试玩版连史东城都不给好好玩,摆明了让玩家到正式版再探索。甚至当时让一群评测媒体表示失望,以为游戏就这么多内容。喂狗组组霸更是直接给法环打了7.5分,直呼老贼或跌落神坛。

法环最终的成功虽然有FS一直以来都的口碑积累,但更多是游戏质量的口口相传。毕竟只狼两年才卖了500多万份,法环在三周之内成为了千万级别的IP。

我为什么担心黑神话悟空?因为我从18年2077第一次实机演示追到了20年,熬夜看了五期火线夜之城的直播,信了制作组每一个吹逼。最终等来的是满满的失望。原因很简单:CDPR以前没做过这么复杂的开放世界。而做巫师3时的他们有前两部的开发经验,容错率较高。成品虽然同样问题与缺点很多,但全都被优秀的人物塑造、演出与剧情/耐玩性较高且上手难度低的战斗系统/错综复杂的半网状任务设计掩盖了。以上三个优点在2077中也能找到,但很显然,脱离了舒适区的CDPR暴露出了比优点严重很多的缺陷,导致口碑崩盘。

而游戏科学这样一个几乎完全没有大型游戏开发经验与技术积累的公司,发出了一个质量比肩(夸张说法)战神的实机演示,还不足够让大家警惕???如果这游戏成品的水准真的有第一次演示那么牛逼,那我当场给他们磕一个,不,全世界做大型单机游戏的厂商都应该给他们磕一个。


另外,我相信不会有不想让黑悟空成为神作的国内玩家。

但做游戏也要讲究基本法吧??罗马不是一天建成的,没有经验积累的厂商无法成就经典。如果这游戏真的能做出20年演示那种高度的成品,那我不得不怀疑游戏科学发现了外星科技。


user avatar   damon-dance-for-me 网友的相关建议: 
      

不要幻想了, 这游戏是个雾件,永远也上不了市。


user avatar   lulueh 网友的相关建议: 
      

既然问的是未发售,那就以未发售的状态算。

FS社在老头环之前十几年一步一个脚印,发售前大家对它的期待最差就是魂3搭配垃圾开放世界,只要不暴死,保底也是8分。

而游科在之前有过啥正儿八经的大制作以证明其实力吗?不要拿斗战神这种老黄历来说事,创造了使命召唤这个巨IP的前IW核心团队,从动视出走创立重生工作室,都花了两作才证明其战斗力尚在,第三作APEX终成现象级作品。在重生刚起步的时候,你敢打保票他们一定能成?团队磨合是件很奇妙的事,更不用说行业内优秀制作团队制作人出走/重组/人事动荡之后一蹶不振的例子多了去了。

现在对黑神话的预期,应该是让游科把预告片里的东西稳稳当当的实现出来,不出大错混个7分保底,如果能做出些亮眼的要素拿下个8分,那已经是非常有前途的年度业界新星了。至于9分?不是说没可能,只是这概率未免低到可以忽略。


user avatar   shao-shuai-44-24 网友的相关建议: 
      

很少有人不基于框架直接写GUI界面啦,我这个回答就从GUI框架反过来推什么语言做GUI合适。(只聊桌面端GUI编程框架)

Qt

几乎是C++领域最流行的跨平台桌面端软件开发框架了,这个框架是两个挪威人在1995年创建的,发展至今可以说历史相当悠久,稳定性也很有保障。很多大公司都在用它做界面比如金山的WPS。

它内置了自绘引擎,也就是说界面上的一个按钮,一个文本框,都是Qt的引擎自己画的,这保证了基于Qt开发的软件界面在不同操作系统上看起来是一模一样的。

它提供了大量的与界面无关但与软件开发息息相关的API,比如、网络、文件系统、剪切板等,而且让这些API在不同的操作系统下都有效,这极大的节省了开发人员的时间。

但它也有一些缺点,比如在处理一些特殊需求上很不方便,比如:目前Qt有没有比较好解决高分屏下缩放显示的方案?Qt没有真正完美的无边框解决方案吗?等,在一些组件的渲染上也会出一些隐藏的较深的问题(QListItem),一旦遇到,就很难解决。

Qt近年来不太专一,qml,qtquick等,搞了很多,而且这些新玩意儿一直不温不火,有些模块做了又废弃了,比如:qt script,搞来搞去,搞的模块繁多且复杂,用起来不是很舒服。

Qt有界面描述语言(XML描述界面),可以通过设计器拖拽空间设计界面,编译期界面描述语言被转义成C++代码,性能上没啥损失。

Qt商业授权不太友好,开发商业应用一定要谨慎,之前听说有公司为此付出了高额的版权费。个人开发者可以免费使用。Qt的免费版本不允许静态链接,会有版权上的限制,但开发者还是可以通过一些特殊的编译方法静态连接Qt的库的。

除了使用C++开发Qt应用外,开发者还可以使用其他语言开发Qt应用,最流行的就是使用Python基于PyQt做Qt应用了,其他语言的绑定不是很成熟,但PyQt仍然有版权的问题。

GTK

GTK是1997年创建的,也非常成熟稳定,是C语言开发的,但有很多语言的绑定,比如官方支持的JavaScript、Rust等,当然用C++语言操作GTK也很方便,它也有自绘引擎(Cairo),也提供了大量系统相关的API,商业授权也非常友好,基于GTK开发商业软件不用担心收到律师函的问题,虽然它是一个跨平台桌面软件,但它似乎只在Linux操作系统领域流行,有非常多的Linux桌面软件都是基于GTK开发的。

这也直接导致GTK的维护者很重视Linux领域的发展,而忽视Windows和Mac领域。这个框架提供的很多API,只在Linux下有,Windows和Mac下没有。这样的API数量众多。甚至在Windows下编译一下GTK的源码都要比Linux下难很多。而且GTK的渲染引擎在Windows下性能表现也不如在Linux下好。

GTK在Windows上也没办法静态连接,它到不是因为版权的问题,而是它依赖MSYS2的一些库,这个库用于在Windows上模拟Linux环境,这也是为什么GTK在Windows上表现不佳的原因之一。

另外,由于GTK是C语言开发的,所以开发风格也很C语言化,这对于部分开发者来说可能觉得繁琐。

wxWidgets

wxWidgets是1992年英国的一个大学教授开创的跨平台GUI软件,也非常成熟稳定,商业授权非常友好。它没有自绘引擎,而是对不同平台下的界面API做了整合和封装,这样开发者在Windows下开发的软件看起来就是Windows窗口风格、Linux开发的软件看起来就是Linux窗口风格,这对于某些软件来说,正是他们想要的,但要想搞一些花哨的特效就没那么容易了。它同样也提供了大量的系统相关的API供开发者使用。

它是C++开发的,所以对C++开发者非常友好,除此之外它还支持静态连接,也就是说开发个应用不用分发给用户一大堆dll,当然Qt也支持静态连接,但是你得自己编译Qt的源码(不是很方便),而且Qt的授权规则也不允许普通开发者这么做。

它会有些小问题,比如我之前提的:wxEVT_NOTIFICATION_MESSAGE_DISMISSED event emit twice,但总体来说还是非常稳的。除了开发的界面比较死板外,没啥大的问题。目前使用这个框架开发软件的人越来越少了。

FLTK

fltk是1998年创建的跨平台开源GUI框架,历史悠久,商业授权友好,而且C++之父也用它,它非常轻量级,支持静态连接,一个简单的应用编译后只有500K左右,非常赞,

它有自己的自绘引擎,没记错的话用的是OpenGL,但它的重绘机制是按区域重绘的,如果组件A所在的区域上存在组件B,那么A组件重绘时,会把B组件的给重回掉,开发者必须自己写代码处理这种情况。想象一下,如果你想实现一个A组件fade out的同时B组件fade in的效果,就会非常麻烦。

FLTK提供的一些组件样式都比较刻板,绘图API也比较少,你想实现一个漂亮一点的圆角按钮(它内置圆角按钮的圆角大小是不能改的),必须自己画,而且还得借助一些非常奇葩的手段才行(如果你想知道,可以联系我)

它是C++开发的,但API不够现代,用起来总体还算舒服的,它有Rust绑定:fltk-rs。它的用户比前面三个都少。它提供了一些与界面无关的操作系统API,但非常少,几乎可以忽略。

Duilib

是2010年国内一个开发者开发的GUI开发框架,因为底层基于DirectUI开发,所以只支持Windows平台,不支持跨平台,开源协议友好,商用没有任何问题(需要附加Lincence文件),国内有很多大厂基于这个技术做桌面端应用,比如网易、腾讯、百度,这个框架是基于C++开发的,对C++开发者友好。但框架本身还有一些问题,比如对高分屏支持不佳、特殊控件绘制上也有一些小问题,除了界面相关的API外,几乎没有提供系统级的API,作者纯粹是用爱发电来开发这个框架,所以更新不是很及时。

相对来说网易基于Duilib开发的分支更完善一些:NIM_Duilib_Framework,添加了高分屏支持、多国语言、整合了多线程处理的支持,但环境搭建相对比较麻烦。如果开发者要用这个框架,一定要用develop分支下的代码,master分支下的代码问题很多,这个框架看上去也是作者一个人努力的成果。

Sciter

Sciter是2006年创建的跨平台闭源GUI框架,足够稳定,商业授权不友好,但个人开发者可以随便用(只能用动态链接库),一旦公司规模超过3人,就得买版权了(有权静态连接)。

它内部封了一个浏览器核心,让开发者使用HTML,CSS,JS来创建界面,但对这个浏览器核心做了大量的精简,不像Electron和NW.js动辄上百兆的体积,它只要6M就够了。当然这也意味着有些浏览器特性它是不支持的,比如CSS3的flex布局,它就不支持(但它提供了自己的flex布局实现方式)。以前它使用自研的一个脚本语言(和JavaScript很像),自从集成了Fabrice Bellard大神的QuickJs之后,就全面支持JavaScript了。它还对一些特殊的场景做了内置的支持,比如渲染大列表。

它使用C++开发,对C++开发者很友好,有Rust、go、Python等语言的绑定,但都是社区提供的,质量堪忧。有很多知名厂商都用这个库做界面,比如360、teamviewer、赛门铁克等。

RmlUi和Sciter很像,可以看成Sciter的替代框架,但RmlUi这个项目有三界作者,一个一个的弃坑不知道新任作者会不会弃坑,目前还不是很成熟,比如我正在尝试帮作者解决的CJK输入法的问题,目前还不推荐大家使用这个框架。

CEF

CEF是2008年创立的,基于Chromium的跨平台GUI框架,稳定且商业授权友好,国内很多大厂都用的CEF:比如微信桌面端、网易云音乐桌面端、QQ桌面端、微信桌面端、MATLAB、FoxMail、OBS Studio,装机量破亿。

由于它几乎封了一个完整的Chromium,所以体积非常大,但支持所有的HTMLCSSJS特性,它几乎不提供任何与操作系统相关的API,创建个托盘图标、读写个文件啥的,都要开发者自己完成,它是C/C++开发完成的,对C++用户非常友好,它有gopythonjava等语言的绑定,但都是社区提供的,质量值得担忧。

它对Chromium封装的很好,避免了开发者直接与Blink、V8、Chromium等复杂的代码打交道,很多功能都有默认实现方式,遵从约定由于配置原则,有经验的C++开发者可以很轻松的驾驭CEF框架。

由于Chromium是版本弟,所以CEF版本发布也非常频繁,很多被标记为稳定的版本,还是会出一些莫名其妙的问题,选一个好的版本非常重要。

与Electron一样,它也是分主进程和渲染进程的,所以开发者要非常娴熟的运用跨进程通信的技术,虽然CEF提供了跨进程相关的API,但复杂度还是有点高的,使用的时候要认真细心。

MAUI

这是微软的跨平台GUI框架,不仅仅支持桌面端,还支持移动端,但官方并不支持Linux的桌面端(黑人问号,感觉与微软近些年向开放、开源的大方针相悖),这个框架新的狠,至今还没发布稳定版。目前还没什么人用。而且不知道将来会不会被微软放弃。

它是.NET平台下的GUI框架,有自绘引擎,对C#开发者很友好,界面依然是用XAML描述的,可能很多人一听到XAML就直接弃坑了。XAML表现力确实弱一些,我觉得WPF没火起来跟XAML有直接关系。

使用这个框架开发桌面应用得封一个.NET框架给用户,当然有了.NET框架应用程序访问一般的系统级API也就不成问题了。

Compose Multiplatform

这是JetBrains搞的跨平台GUI框架,也非常新,前段时间刚刚推出1.0.0版本,但这个版本还不是很稳,至少比Flutter Desktop的第一个稳定版要差很多。同样也几乎没什么人用。

它的自绘引擎用的是Google的skia,这个自绘引擎稳的很,Chrome和Flutter都是用的它,所以排版、绘制、渲染之类的工作不太会出问题。比Java生态圈里的Swing和JavaFx要好很多。

JetBrains的东西当然对Kotlin开发者友好啦,Java生态下的很多东西你都能用,访问系统级API也没啥大问题,同样也得考虑封一个JRE给用户。

flutter-desktop

这是谷歌的跨平台开发框架,开源、免费、文档齐全、投入力度大且持久,同样也新的很,Windows版本刚刚发稳定版,Mac版本还没稳定。

如果你完全没搞过移动端的flutter,想用这个框架开发桌面应用,那么意味着你要学的东西还挺多的。好在dart和flutter入门都不是很难,学习曲线比较平缓。

由于flutter在移动端积累了很多年,所以界面上的一些东西在desktop端都比较稳(skia自绘引擎),与操作系统相关的东西还不成熟,生态也不太好,比如你想订制一下窗口的标题栏,想访问一下注册表这类工作可能得自己想办法。不过它有类似FFI的支持,跟C/C++语言打交道很方便。

开发者直接使用Dart语言描述界面,这会导致众多大括号嵌套在一起的问题,可能很多开发者不习惯。

webview2

这是微软Edge浏览器团队推出的跨平台GUI引擎,是闭源的,目前只支持Windows,对C#和C++开发者友好,如果使用C#开发,就得考虑把.NET运行时分发给用户,如果使用C++开发,就得自己处理系统级API的操作,webview2本身是不对系统级API做封装的。

这个框架推出也没多久,很多API也还不稳定,更值得担忧的是这个团队,他们前不久刚刚放弃了自己的浏览器核心转而使用Chromium浏览器核心,不知道他们会不会放弃webview2这个框架。

它的优势是可以复用系统当中已存在的webview2二进制资源,也就是说它虽然封了一个Chromium浏览器核心,但如果你可以确定客户电脑已经存在了基于webview2开发的应用,你的安装包体积可以足够小。

它也是多进程架构,甚至比Electron还要多一个进程(为了复用二进制资源),资源占用比较多。

webview

这个库使用操作系统的浏览器引擎来达到减小安装包体积的问题,Mac上使用Cocoa/WebKit,Linux上使用gtk-webkit2,Windows 10上使用Edge(也就是上一个小节里提到的webview2),它应该是不支持Win7的。开发者要考虑前端代码浏览器兼容的问题。

开源且免费(MIT)有go、Rust、Python等语言的绑定,不过官方支持的是go语言,C和C++,操作浏览器的API非常少,不支持自定义scheme,更别提系统级API了。

TAURI

采用的技术方案与webview类似,所以安装包也足够小,非常新,还没发布稳定版,开源免费。webview框架碰到的问题TAURI都有,

使用Rust开发,将来会支持Deno,作者说将来会直接使用webview的技术来支持多平台,

NW.js

NW.js最早把Chromium和Node绑定到一起,用前端知识做界面,用Node技术访问操作系统,最早叫node-webkit,在2012年创建。NW.js基于MIT开源,可以无忧使用。没记错的话,微信小程序开发工具是用NW.js开发的。作者是英特尔的员工,英特尔的一些工具也是用NW.js开发的。

除了Chromium和Node的能力外,NW.js自己也封装了一些系统级API,类似托盘图标、剪切板、系统菜单这种,但数量明显比Electron要少。

NW.js可以在多个窗口间共享同一个Node.js上下文,而且还可以通过配置让Node的上下文和Dom上下文混合,这给开发者带来了很多便利。心智负担减少很多。不像Electron要时刻想着进程间通信,哪些模块当前进程不能用这类问题。

NW.js虽然起步早,但奈何没有杀手级应用,周边的生态和工具链没发展起来。用的人越来越少,维护的投入也不如Electron大,再加上Chromium更新非常频繁,导致NW.js的有些API也不是很稳,恶性循环加剧。

Electron

Electron的作者曾经在NW.js团队工作过(NW.js项目贡献第二多的人就是Electron的作者),后来辗转到了github公司,于2013年在创建了Electron,也是个开源免费的产品。由于VSCode、slak等国际型产品都选择了Electron,所以从者甚众,生态和周边工具链也完善的多。虽然开发方式上有点蹩脚的地方(多进程架构及模块归属进程),但瑕不掩瑜。

Electron每创建一个窗口都会多一个进程,这使Electron创建窗口的效率不高(秒级),NW.js有复用进程的机制,即使新窗口加载完全不同域的页面也不会创建新的进程(毫秒级)。这也是为什么很多基于Electron开发的应用都使用Dom模拟弹窗的原因。

无论是浏览器相关的API,还是系统级API,Electron提供的都比NW.js多。

--------2022-02-25更新--------

这些框架除了对开发者使用的编程语言有要求外,还有一个重要的差异就是有没有独立的界面描述语言(也就是UI DSL),这非常重要,涉及到一个框架表达业务的重要能力。

类似XAML、qt的ui文件、HTML+CSS都是界面描述语言,下面这种也可以算界面描述语言,但我感觉它不够纯粹(flutter、qml和Compose Multiplatform都是类似这样的):

       panel {   row {     checkBox(...)     row {       textField(...) // indented relatively to the checkbox above     }   } }     

但无论如何,显而易见的是,没有任何一个界面描述语言能比的上HTML+CSS组合。想想看:HTML里各种花里胡哨的语义化标签和Dom操作技巧,CSS里的布局方式、伪元素、动画描述...,对比之下你就会觉得XAML、qml直流都是弟弟。

除此之外,一个优秀的GUI框架还有两个重要的需求,这里我简单聊聊:

强大的事件处理机制必不可少。

想想这些:鼠标事件、键盘事件、触屏事件...界面加载完成、媒体播放结束、元素大小改变...网络状态变更、数据段传输完成...另外,还得处理事件冒泡、事件捕获、事件分发吧...

qt的开发者曾经说过qt的SIGNAL和SLOT机制是有性能问题的(但影响很小)

强大的异步处理机制必不可少

你不能在用户处理业务逻辑的时候,让界面渲染工作阻塞,这就需要一个强大的异步处理机制,让开发者自己去开线程去完成业务处理,无疑是又麻烦又会增加开发者的心智负担。

我记得很早之前在C# WinForm应用中,点击一个按钮,如果不用Invoke执行逻辑处理的话,界面就会卡死。

这么看来,在你的GUI应用里包一个浏览器核心还是挺有必要的,这样你就可以用HTML+CSS强大的能力来描述你的界面,用JavaScript强大的事件处理机制和异步处理机制来完成用户交互。

可能有人会想,这会带来很多问题呀,比如应用体积会增大的100M以上、会占用更多的CPU和内存资源,还会更耗电等等。

确实,目前来看这些都是问题,但仔细想想,这些问题应该不会持续太久,网络会变的更快,用户的磁盘和内存会变得更大,CPU处理能力也会更好,耗电的问题当然会持续存在,甚至会愈发耗电,但电的供应会持续增长呀。

web相关的技术之所以胜出,并不是这些技术的设计者有多厉害,而是这20多年间,有大量的人涌入了这个领域,前赴后继的推动着它前进。其他任何一个领域都没有这么热火朝天的景象。推荐大家看看我的另一个回答:

------------2022-02-27更新----------

用Web相关的技术做GUI应用的优势是,让开发者可以把大部分精力投注在业务本身上,而不是处理与GUI相关的技术细节。

实际上所有的框架,都应该是这个目的,比如ORM框架,目的应该是让开发者把大部分精力投注在业务与数据之间的关系上,而不是管理关系型数据的技术细节。

当然这肯定是有损耗的,在性能、稳定性、资源消耗上,都会有所削减。而且,因为有框架的存在,开发者很难深入到框架内部做一些特殊的事情。比如,我们该如何修改HTML的排版渲染机制呢?

所以,有些框架注重性能,有些框架注重开发效率,开发者做选择题的时候也应该衡量这两个问题,你的应用对哪些方面要求多一些呢?

你如果要开发一个视频监控系统,没多少业务功能,但要24小时不间断的记录视频数据,随时调取某一段时间的视频数据,这种应用可能Qt是最好的选择。

你如果要开发一个类似飞书的团队协作应用,业务逻辑复杂的一塌糊涂,而且要在短时间内满足更多用户的需求,占领更多的市场,那么Electron可能是更好的选择(目前飞书已经不再用Electron了,他们自己编译了Chromium核心,自己封了一个类似CEF的框架)

目前微软、谷歌、JetBrains等公司都非常重视桌面端开发框架,也在推各自的框架产品,说明桌面应用领域并没有没落,反而应该更加受到重视。

虽然移动端应用大行其道,但我认为,只有生活、社交、轻娱乐等方向上的应用在移动端有较好的发展。文档协作、大型游戏、开发工具、专业管控软件等应用还是在PC端发展的更好一些,毕竟PC端有更多样的输入输出设备、更广阔的显示和交互的空间,更强的存储和计算能力。

希望桌面软件开发领域的从业者都能获得幸福。

满屏荒唐言,一把辛酸泪,一把辛酸泪,一把辛酸泪...



user avatar   chen-si-qi-22-3-44 网友的相关建议: 
      

很少有人不基于框架直接写GUI界面啦,我这个回答就从GUI框架反过来推什么语言做GUI合适。(只聊桌面端GUI编程框架)

Qt

几乎是C++领域最流行的跨平台桌面端软件开发框架了,这个框架是两个挪威人在1995年创建的,发展至今可以说历史相当悠久,稳定性也很有保障。很多大公司都在用它做界面比如金山的WPS。

它内置了自绘引擎,也就是说界面上的一个按钮,一个文本框,都是Qt的引擎自己画的,这保证了基于Qt开发的软件界面在不同操作系统上看起来是一模一样的。

它提供了大量的与界面无关但与软件开发息息相关的API,比如、网络、文件系统、剪切板等,而且让这些API在不同的操作系统下都有效,这极大的节省了开发人员的时间。

但它也有一些缺点,比如在处理一些特殊需求上很不方便,比如:目前Qt有没有比较好解决高分屏下缩放显示的方案?Qt没有真正完美的无边框解决方案吗?等,在一些组件的渲染上也会出一些隐藏的较深的问题(QListItem),一旦遇到,就很难解决。

Qt近年来不太专一,qml,qtquick等,搞了很多,而且这些新玩意儿一直不温不火,有些模块做了又废弃了,比如:qt script,搞来搞去,搞的模块繁多且复杂,用起来不是很舒服。

Qt有界面描述语言(XML描述界面),可以通过设计器拖拽空间设计界面,编译期界面描述语言被转义成C++代码,性能上没啥损失。

Qt商业授权不太友好,开发商业应用一定要谨慎,之前听说有公司为此付出了高额的版权费。个人开发者可以免费使用。Qt的免费版本不允许静态链接,会有版权上的限制,但开发者还是可以通过一些特殊的编译方法静态连接Qt的库的。

除了使用C++开发Qt应用外,开发者还可以使用其他语言开发Qt应用,最流行的就是使用Python基于PyQt做Qt应用了,其他语言的绑定不是很成熟,但PyQt仍然有版权的问题。

GTK

GTK是1997年创建的,也非常成熟稳定,是C语言开发的,但有很多语言的绑定,比如官方支持的JavaScript、Rust等,当然用C++语言操作GTK也很方便,它也有自绘引擎(Cairo),也提供了大量系统相关的API,商业授权也非常友好,基于GTK开发商业软件不用担心收到律师函的问题,虽然它是一个跨平台桌面软件,但它似乎只在Linux操作系统领域流行,有非常多的Linux桌面软件都是基于GTK开发的。

这也直接导致GTK的维护者很重视Linux领域的发展,而忽视Windows和Mac领域。这个框架提供的很多API,只在Linux下有,Windows和Mac下没有。这样的API数量众多。甚至在Windows下编译一下GTK的源码都要比Linux下难很多。而且GTK的渲染引擎在Windows下性能表现也不如在Linux下好。

GTK在Windows上也没办法静态连接,它到不是因为版权的问题,而是它依赖MSYS2的一些库,这个库用于在Windows上模拟Linux环境,这也是为什么GTK在Windows上表现不佳的原因之一。

另外,由于GTK是C语言开发的,所以开发风格也很C语言化,这对于部分开发者来说可能觉得繁琐。

wxWidgets

wxWidgets是1992年英国的一个大学教授开创的跨平台GUI软件,也非常成熟稳定,商业授权非常友好。它没有自绘引擎,而是对不同平台下的界面API做了整合和封装,这样开发者在Windows下开发的软件看起来就是Windows窗口风格、Linux开发的软件看起来就是Linux窗口风格,这对于某些软件来说,正是他们想要的,但要想搞一些花哨的特效就没那么容易了。它同样也提供了大量的系统相关的API供开发者使用。

它是C++开发的,所以对C++开发者非常友好,除此之外它还支持静态连接,也就是说开发个应用不用分发给用户一大堆dll,当然Qt也支持静态连接,但是你得自己编译Qt的源码(不是很方便),而且Qt的授权规则也不允许普通开发者这么做。

它会有些小问题,比如我之前提的:wxEVT_NOTIFICATION_MESSAGE_DISMISSED event emit twice,但总体来说还是非常稳的。除了开发的界面比较死板外,没啥大的问题。目前使用这个框架开发软件的人越来越少了。

FLTK

fltk是1998年创建的跨平台开源GUI框架,历史悠久,商业授权友好,而且C++之父也用它,它非常轻量级,支持静态连接,一个简单的应用编译后只有500K左右,非常赞,

它有自己的自绘引擎,没记错的话用的是OpenGL,但它的重绘机制是按区域重绘的,如果组件A所在的区域上存在组件B,那么A组件重绘时,会把B组件的给重回掉,开发者必须自己写代码处理这种情况。想象一下,如果你想实现一个A组件fade out的同时B组件fade in的效果,就会非常麻烦。

FLTK提供的一些组件样式都比较刻板,绘图API也比较少,你想实现一个漂亮一点的圆角按钮(它内置圆角按钮的圆角大小是不能改的),必须自己画,而且还得借助一些非常奇葩的手段才行(如果你想知道,可以联系我)

它是C++开发的,但API不够现代,用起来总体还算舒服的,它有Rust绑定:fltk-rs。它的用户比前面三个都少。它提供了一些与界面无关的操作系统API,但非常少,几乎可以忽略。

Duilib

是2010年国内一个开发者开发的GUI开发框架,因为底层基于DirectUI开发,所以只支持Windows平台,不支持跨平台,开源协议友好,商用没有任何问题(需要附加Lincence文件),国内有很多大厂基于这个技术做桌面端应用,比如网易、腾讯、百度,这个框架是基于C++开发的,对C++开发者友好。但框架本身还有一些问题,比如对高分屏支持不佳、特殊控件绘制上也有一些小问题,除了界面相关的API外,几乎没有提供系统级的API,作者纯粹是用爱发电来开发这个框架,所以更新不是很及时。

相对来说网易基于Duilib开发的分支更完善一些:NIM_Duilib_Framework,添加了高分屏支持、多国语言、整合了多线程处理的支持,但环境搭建相对比较麻烦。如果开发者要用这个框架,一定要用develop分支下的代码,master分支下的代码问题很多,这个框架看上去也是作者一个人努力的成果。

Sciter

Sciter是2006年创建的跨平台闭源GUI框架,足够稳定,商业授权不友好,但个人开发者可以随便用(只能用动态链接库),一旦公司规模超过3人,就得买版权了(有权静态连接)。

它内部封了一个浏览器核心,让开发者使用HTML,CSS,JS来创建界面,但对这个浏览器核心做了大量的精简,不像Electron和NW.js动辄上百兆的体积,它只要6M就够了。当然这也意味着有些浏览器特性它是不支持的,比如CSS3的flex布局,它就不支持(但它提供了自己的flex布局实现方式)。以前它使用自研的一个脚本语言(和JavaScript很像),自从集成了Fabrice Bellard大神的QuickJs之后,就全面支持JavaScript了。它还对一些特殊的场景做了内置的支持,比如渲染大列表。

它使用C++开发,对C++开发者很友好,有Rust、go、Python等语言的绑定,但都是社区提供的,质量堪忧。有很多知名厂商都用这个库做界面,比如360、teamviewer、赛门铁克等。

RmlUi和Sciter很像,可以看成Sciter的替代框架,但RmlUi这个项目有三界作者,一个一个的弃坑不知道新任作者会不会弃坑,目前还不是很成熟,比如我正在尝试帮作者解决的CJK输入法的问题,目前还不推荐大家使用这个框架。

CEF

CEF是2008年创立的,基于Chromium的跨平台GUI框架,稳定且商业授权友好,国内很多大厂都用的CEF:比如微信桌面端、网易云音乐桌面端、QQ桌面端、微信桌面端、MATLAB、FoxMail、OBS Studio,装机量破亿。

由于它几乎封了一个完整的Chromium,所以体积非常大,但支持所有的HTMLCSSJS特性,它几乎不提供任何与操作系统相关的API,创建个托盘图标、读写个文件啥的,都要开发者自己完成,它是C/C++开发完成的,对C++用户非常友好,它有gopythonjava等语言的绑定,但都是社区提供的,质量值得担忧。

它对Chromium封装的很好,避免了开发者直接与Blink、V8、Chromium等复杂的代码打交道,很多功能都有默认实现方式,遵从约定由于配置原则,有经验的C++开发者可以很轻松的驾驭CEF框架。

由于Chromium是版本弟,所以CEF版本发布也非常频繁,很多被标记为稳定的版本,还是会出一些莫名其妙的问题,选一个好的版本非常重要。

与Electron一样,它也是分主进程和渲染进程的,所以开发者要非常娴熟的运用跨进程通信的技术,虽然CEF提供了跨进程相关的API,但复杂度还是有点高的,使用的时候要认真细心。

MAUI

这是微软的跨平台GUI框架,不仅仅支持桌面端,还支持移动端,但官方并不支持Linux的桌面端(黑人问号,感觉与微软近些年向开放、开源的大方针相悖),这个框架新的狠,至今还没发布稳定版。目前还没什么人用。而且不知道将来会不会被微软放弃。

它是.NET平台下的GUI框架,有自绘引擎,对C#开发者很友好,界面依然是用XAML描述的,可能很多人一听到XAML就直接弃坑了。XAML表现力确实弱一些,我觉得WPF没火起来跟XAML有直接关系。

使用这个框架开发桌面应用得封一个.NET框架给用户,当然有了.NET框架应用程序访问一般的系统级API也就不成问题了。

Compose Multiplatform

这是JetBrains搞的跨平台GUI框架,也非常新,前段时间刚刚推出1.0.0版本,但这个版本还不是很稳,至少比Flutter Desktop的第一个稳定版要差很多。同样也几乎没什么人用。

它的自绘引擎用的是Google的skia,这个自绘引擎稳的很,Chrome和Flutter都是用的它,所以排版、绘制、渲染之类的工作不太会出问题。比Java生态圈里的Swing和JavaFx要好很多。

JetBrains的东西当然对Kotlin开发者友好啦,Java生态下的很多东西你都能用,访问系统级API也没啥大问题,同样也得考虑封一个JRE给用户。

flutter-desktop

这是谷歌的跨平台开发框架,开源、免费、文档齐全、投入力度大且持久,同样也新的很,Windows版本刚刚发稳定版,Mac版本还没稳定。

如果你完全没搞过移动端的flutter,想用这个框架开发桌面应用,那么意味着你要学的东西还挺多的。好在dart和flutter入门都不是很难,学习曲线比较平缓。

由于flutter在移动端积累了很多年,所以界面上的一些东西在desktop端都比较稳(skia自绘引擎),与操作系统相关的东西还不成熟,生态也不太好,比如你想订制一下窗口的标题栏,想访问一下注册表这类工作可能得自己想办法。不过它有类似FFI的支持,跟C/C++语言打交道很方便。

开发者直接使用Dart语言描述界面,这会导致众多大括号嵌套在一起的问题,可能很多开发者不习惯。

webview2

这是微软Edge浏览器团队推出的跨平台GUI引擎,是闭源的,目前只支持Windows,对C#和C++开发者友好,如果使用C#开发,就得考虑把.NET运行时分发给用户,如果使用C++开发,就得自己处理系统级API的操作,webview2本身是不对系统级API做封装的。

这个框架推出也没多久,很多API也还不稳定,更值得担忧的是这个团队,他们前不久刚刚放弃了自己的浏览器核心转而使用Chromium浏览器核心,不知道他们会不会放弃webview2这个框架。

它的优势是可以复用系统当中已存在的webview2二进制资源,也就是说它虽然封了一个Chromium浏览器核心,但如果你可以确定客户电脑已经存在了基于webview2开发的应用,你的安装包体积可以足够小。

它也是多进程架构,甚至比Electron还要多一个进程(为了复用二进制资源),资源占用比较多。

webview

这个库使用操作系统的浏览器引擎来达到减小安装包体积的问题,Mac上使用Cocoa/WebKit,Linux上使用gtk-webkit2,Windows 10上使用Edge(也就是上一个小节里提到的webview2),它应该是不支持Win7的。开发者要考虑前端代码浏览器兼容的问题。

开源且免费(MIT)有go、Rust、Python等语言的绑定,不过官方支持的是go语言,C和C++,操作浏览器的API非常少,不支持自定义scheme,更别提系统级API了。

TAURI

采用的技术方案与webview类似,所以安装包也足够小,非常新,还没发布稳定版,开源免费。webview框架碰到的问题TAURI都有,

使用Rust开发,将来会支持Deno,作者说将来会直接使用webview的技术来支持多平台,

NW.js

NW.js最早把Chromium和Node绑定到一起,用前端知识做界面,用Node技术访问操作系统,最早叫node-webkit,在2012年创建。NW.js基于MIT开源,可以无忧使用。没记错的话,微信小程序开发工具是用NW.js开发的。作者是英特尔的员工,英特尔的一些工具也是用NW.js开发的。

除了Chromium和Node的能力外,NW.js自己也封装了一些系统级API,类似托盘图标、剪切板、系统菜单这种,但数量明显比Electron要少。

NW.js可以在多个窗口间共享同一个Node.js上下文,而且还可以通过配置让Node的上下文和Dom上下文混合,这给开发者带来了很多便利。心智负担减少很多。不像Electron要时刻想着进程间通信,哪些模块当前进程不能用这类问题。

NW.js虽然起步早,但奈何没有杀手级应用,周边的生态和工具链没发展起来。用的人越来越少,维护的投入也不如Electron大,再加上Chromium更新非常频繁,导致NW.js的有些API也不是很稳,恶性循环加剧。

Electron

Electron的作者曾经在NW.js团队工作过(NW.js项目贡献第二多的人就是Electron的作者),后来辗转到了github公司,于2013年在创建了Electron,也是个开源免费的产品。由于VSCode、slak等国际型产品都选择了Electron,所以从者甚众,生态和周边工具链也完善的多。虽然开发方式上有点蹩脚的地方(多进程架构及模块归属进程),但瑕不掩瑜。

Electron每创建一个窗口都会多一个进程,这使Electron创建窗口的效率不高(秒级),NW.js有复用进程的机制,即使新窗口加载完全不同域的页面也不会创建新的进程(毫秒级)。这也是为什么很多基于Electron开发的应用都使用Dom模拟弹窗的原因。

无论是浏览器相关的API,还是系统级API,Electron提供的都比NW.js多。

--------2022-02-25更新--------

这些框架除了对开发者使用的编程语言有要求外,还有一个重要的差异就是有没有独立的界面描述语言(也就是UI DSL),这非常重要,涉及到一个框架表达业务的重要能力。

类似XAML、qt的ui文件、HTML+CSS都是界面描述语言,下面这种也可以算界面描述语言,但我感觉它不够纯粹(flutter、qml和Compose Multiplatform都是类似这样的):

       panel {   row {     checkBox(...)     row {       textField(...) // indented relatively to the checkbox above     }   } }     

但无论如何,显而易见的是,没有任何一个界面描述语言能比的上HTML+CSS组合。想想看:HTML里各种花里胡哨的语义化标签和Dom操作技巧,CSS里的布局方式、伪元素、动画描述...,对比之下你就会觉得XAML、qml直流都是弟弟。

除此之外,一个优秀的GUI框架还有两个重要的需求,这里我简单聊聊:

强大的事件处理机制必不可少。

想想这些:鼠标事件、键盘事件、触屏事件...界面加载完成、媒体播放结束、元素大小改变...网络状态变更、数据段传输完成...另外,还得处理事件冒泡、事件捕获、事件分发吧...

qt的开发者曾经说过qt的SIGNAL和SLOT机制是有性能问题的(但影响很小)

强大的异步处理机制必不可少

你不能在用户处理业务逻辑的时候,让界面渲染工作阻塞,这就需要一个强大的异步处理机制,让开发者自己去开线程去完成业务处理,无疑是又麻烦又会增加开发者的心智负担。

我记得很早之前在C# WinForm应用中,点击一个按钮,如果不用Invoke执行逻辑处理的话,界面就会卡死。

这么看来,在你的GUI应用里包一个浏览器核心还是挺有必要的,这样你就可以用HTML+CSS强大的能力来描述你的界面,用JavaScript强大的事件处理机制和异步处理机制来完成用户交互。

可能有人会想,这会带来很多问题呀,比如应用体积会增大的100M以上、会占用更多的CPU和内存资源,还会更耗电等等。

确实,目前来看这些都是问题,但仔细想想,这些问题应该不会持续太久,网络会变的更快,用户的磁盘和内存会变得更大,CPU处理能力也会更好,耗电的问题当然会持续存在,甚至会愈发耗电,但电的供应会持续增长呀。

web相关的技术之所以胜出,并不是这些技术的设计者有多厉害,而是这20多年间,有大量的人涌入了这个领域,前赴后继的推动着它前进。其他任何一个领域都没有这么热火朝天的景象。推荐大家看看我的另一个回答:

------------2022-02-27更新----------

用Web相关的技术做GUI应用的优势是,让开发者可以把大部分精力投注在业务本身上,而不是处理与GUI相关的技术细节。

实际上所有的框架,都应该是这个目的,比如ORM框架,目的应该是让开发者把大部分精力投注在业务与数据之间的关系上,而不是管理关系型数据的技术细节。

当然这肯定是有损耗的,在性能、稳定性、资源消耗上,都会有所削减。而且,因为有框架的存在,开发者很难深入到框架内部做一些特殊的事情。比如,我们该如何修改HTML的排版渲染机制呢?

所以,有些框架注重性能,有些框架注重开发效率,开发者做选择题的时候也应该衡量这两个问题,你的应用对哪些方面要求多一些呢?

你如果要开发一个视频监控系统,没多少业务功能,但要24小时不间断的记录视频数据,随时调取某一段时间的视频数据,这种应用可能Qt是最好的选择。

你如果要开发一个类似飞书的团队协作应用,业务逻辑复杂的一塌糊涂,而且要在短时间内满足更多用户的需求,占领更多的市场,那么Electron可能是更好的选择(目前飞书已经不再用Electron了,他们自己编译了Chromium核心,自己封了一个类似CEF的框架)

目前微软、谷歌、JetBrains等公司都非常重视桌面端开发框架,也在推各自的框架产品,说明桌面应用领域并没有没落,反而应该更加受到重视。

虽然移动端应用大行其道,但我认为,只有生活、社交、轻娱乐等方向上的应用在移动端有较好的发展。文档协作、大型游戏、开发工具、专业管控软件等应用还是在PC端发展的更好一些,毕竟PC端有更多样的输入输出设备、更广阔的显示和交互的空间,更强的存储和计算能力。

希望桌面软件开发领域的从业者都能获得幸福。

满屏荒唐言,一把辛酸泪,一把辛酸泪,一把辛酸泪...





     

相关话题

  巫师三二周目和一周目有什么区别? 
  仁王讲了一个怎样的故事? 
  为什么没有提供游戏主机的「网吧」?如果有的话,为什么不如普通PC网吧流行? 
  游戏工委发布网络游戏行业防沉迷自律公约,抵制通过境外游戏平台向国内用户提供服务等行为,将产生哪些影响? 
  为什么游戏《巫师 3》的简中翻译很直译,宛如机翻? 
  为什么足球类游戏都是 5 到 30 分钟,而没有完整 90 分钟的比赛? 
  如何评价《原神》限时活动中一些逐月符放置地点需要耗很多体力丝毫不考虑萌新的做法? 
  电视游戏的盈利有没有PC和手游高? 
  可以推荐一下适合女生入门玩的精心制作的电脑大型单机游戏吗? 
  游戏性唯一至上论对于游戏的发展是否不够科学? 

前一个讨论
在监狱不干活怎么办?
下一个讨论
如何评价沈逸教授暗示知乎用户库尔沃塔森林可能来自台湾?





© 2024-05-13 - tinynew.org. All Rights Reserved.
© 2024-05-13 - tinynew.org. 保留所有权利