Windows Terminal 的性能有多烂

2021-07-05 12:43:45 +08:00
 h404bi

Casey Muratori 最近在 Windows Terminal 的 GitHub issue tracker 发了一个反馈—— Extremely slow performance when processing virtual terminal sequences,表达了对 WT 性能的关注,他还写了一个 benchmark 程序 TermBench 来测试 WT 的渲染性能具体有多差(根据 Casey 表述,达到了惊人的 2 fps)。

issue 中 WT 的 member 们不断回复讨论“说明解释”运行慢的理由,后来为了避免讨论失控,给出了有意思的「 because we've made it hard, not because of some intrinsic quality of the universe. 」结论。不过还是未能说服 Casey,进一步激烈的讨论后 Casey 得到了「 what you’re doing is describing something that might be considered an entire doctoral research project in performant terminal emulation as “extremely simple” somewhat combatively. 」的论断,被认为把事情看得过于简单,因为终端性能这件事能作为 PhD 项目了。

Casey 当然不服,但 issue 已经被锁了。于是他在他的 Handmade Hero 频道上“罕见地”发布了一名为 How fast should an unoptimized terminal run? 的与 HandmadeHero 无关的视频(还调侃地写上了 Terminal PhD Dissertation )来论述 WT 到底有多慢,它能有多快:

https://www.youtube.com/watch?v=hxM8QmyZXtg

除了视频,还给出了相应的参考实现 RefTerm: https://github.com/cmuratori/refterm 作为对比。

Hacknernews 上也有对此的讨论串 https://news.ycombinator.com/item?id=27725133,虽然并没有太多讨论,但也有些挺有意思的,比如「 ... if your team lacks anyone with that intuitions, your team will spend their time finding “explanations” for the bad performance instead of fixing it. 」。

整个事件看下来,我对最近发布的 Windows 11 也有了新的感慨——无论再怎么更新,它依旧是一座大屎山,有些东西就是长年无法改变的,看看这个回复回复就知道。(逃)


Casey Muratori 是谁?

Casey Muratori 是一名经验丰富的游戏引擎开发者,参与过多款知名游戏的研发。他也是 Handmade Hero 项目的作者,如果你不了解 Handmade Hero,可以去搜索了解下。这个非常硬核的教学向项目发起于 2014 年,目标是不使用任何引擎,从头手写每一行代码来学习做出一款游戏。每周进行更新,至今已坚持近 7 年之久,超过 600 集视频,还衍生出如 4coder 等实际生产可用的项目。

13293 次点击
所在节点    Windows
80 条回复
NilChan
2021-07-05 12:53:47 +08:00
火钳留名?
ncepuzs
2021-07-05 12:58:02 +08:00
"…无论再怎么更新,它依旧是一座大屎山,有些东西就是长年无法改变的…"

—— 认同
Helsing
2021-07-05 12:59:03 +08:00
别说性能,我现在 wsl2 的 adb 都没搞定
sneezry
2021-07-05 12:59:04 +08:00
如果社区能抓出 WT 的小尾巴“这里你们微软的工程师居然这么写,性能不差才怪”就比较精彩了
h404bi
2021-07-05 13:26:19 +08:00
@sneezry 其实要能抓出来了,并且项目方认可接受,可以改得过来那还是很好的。不过有时候得到的是所谓的理由和阻碍,那就挺难了。
byte10
2021-07-05 13:48:46 +08:00
我都百度不出来了。为啥一个终端还有性能的问题?不就是 shell 终端吗?会有啥性能的问题。啥场景
Tumblr
2021-07-05 14:00:07 +08:00
诶~ 这个瓜有意思了,关注 ing

其实说到多色输出的性能,可能要问一下“一个 terminal 是否对这方面有要求呢?”

比如有一次我看到我朋友的电脑说“这么慢你也受得了”,他说“我也就偶尔查个东西打点资料,平时也不怎么用”。我确实觉得他电脑确实该升级优化了,但是他觉得用着挺好的……

BTW,借楼问一下,kcg/s 是个什么单位?我用 Casey 的那个工具,c 语言版本的基本上在 80kcg/s,msvc 的基本在 70kcg/s 。 ( color per character )
thefack
2021-07-05 14:06:51 +08:00
我想说偶尔 PS 打开要等 5 秒以上是什么情况,虽然启动时要加载一个自己编写几个 function,也不至于这么慢啊
Kobayashi
2021-07-05 14:10:50 +08:00
友情提示:
1. 标题以偏盖全,原文性能差只针对彩色字符渲染
2. 没有浏览完整 issue 希望您能谨慎评论。

隔行如隔山,我不懂游戏渲染也不懂终端字符渲染就不说啥了。
b1iy
2021-07-05 14:35:16 +08:00
一个免费的东西,对我来说完完全全够用,我喜欢就行了。
hafuhafu
2021-07-05 15:08:11 +08:00
我没搞明白,为啥每次 wt 加载配置文件需要 2-3 秒左右的时间...明明只加载了 oh-my-posh
mxalbert1996
2021-07-05 15:11:45 +08:00
@hafuhafu 先分清楚 terminal 和 shell
Leviathann
2021-07-05 15:13:37 +08:00
@byte10 这个我在 wsltty 上比较常见,就是全屏内容完全刷新的话,经常会明显看到内容是从上往下刷新的。
hafuhafu
2021-07-05 15:15:08 +08:00
@mxalbert1996 #12 就是因为 WT 啊...我直接开 Powshell 在 1 秒内。用 WT 开 Powshell 要 2-3 秒。
12101111
2021-07-05 15:27:46 +08:00
看来上面有不少人连 shell 和 virtual terminal 都分不清楚
wt 烂似乎是因为微软用 DirectWrite 绘制文字, 但是 DirectWrite 实际上会考虑大量在终端上用不到的特性, 一些很快的终端(比如 Alacritty)压根就不支持连字这些特性, 但是 DirectWrite 支持.
说道屎山这件事, Windows NT 确实存在大量的屎山, 但是 wt 和 Windows 11 绝对是铲除屎山的行动, 像 std::String 这种东西过去在 NT 里是不可能出现的.
MrKrabs
2021-07-05 15:41:58 +08:00
cmd 输出不就很慢嘛,还记得输出个 ffmpeg full help 就要半天
toptyloo
2021-07-05 15:47:16 +08:00
标题党,另外你用 terminal 项目的 issue 要怎么论证 Windows 11 会很烂?
dfkjgklfdjg
2021-07-05 15:49:33 +08:00
一座大屎山这个真的,你放弃向后兼容,一堆骂你的,你不放弃也是一堆骂你的,唉。
HankAviator
2021-07-05 15:49:57 +08:00
@Helsing 调 windows 的或者自己下一个最新的 adb 放好就行了啊,问题出在哪里
charlie21
2021-07-05 16:02:33 +08:00
哪方面的性能低

这方面的性能低所带来的影响是什么

( 渲染性能 2 fps 带来的影响是什么,是不是阻止人们在终端里看彩色视频会很卡?还是有什么除了 “在终端里看视频” 之外的别的需求

有这部分需求的人有多少 占多少百分比,是不是一个可以抛弃的用户类

满足了这类特殊需求个体有什么好处,特殊需求个体乐意支付多少钱)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX