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 等实际生产可用的项目。
贴一些原 issue 之后的内容,感兴趣可以继续了解:
Be nice and make things better.
1
NilChan 2021-07-05 12:53:47 +08:00 via Android
火钳留名?
|
2
ncepuzs 2021-07-05 12:58:02 +08:00 10
"…无论再怎么更新,它依旧是一座大屎山,有些东西就是长年无法改变的…"
—— 认同 |
3
Helsing 2021-07-05 12:59:03 +08:00 via iPhone
别说性能,我现在 wsl2 的 adb 都没搞定
|
4
sneezry 2021-07-05 12:59:04 +08:00 via iPhone 1
如果社区能抓出 WT 的小尾巴“这里你们微软的工程师居然这么写,性能不差才怪”就比较精彩了
|
5
h404bi OP @sneezry 其实要能抓出来了,并且项目方认可接受,可以改得过来那还是很好的。不过有时候得到的是所谓的理由和阻碍,那就挺难了。
|
6
byte10 2021-07-05 13:48:46 +08:00
我都百度不出来了。为啥一个终端还有性能的问题?不就是 shell 终端吗?会有啥性能的问题。啥场景
|
7
Tumblr 2021-07-05 14:00:07 +08:00
诶~ 这个瓜有意思了,关注 ing
其实说到多色输出的性能,可能要问一下“一个 terminal 是否对这方面有要求呢?” 比如有一次我看到我朋友的电脑说“这么慢你也受得了”,他说“我也就偶尔查个东西打点资料,平时也不怎么用”。我确实觉得他电脑确实该升级优化了,但是他觉得用着挺好的…… BTW,借楼问一下,kcg/s 是个什么单位?我用 Casey 的那个工具,c 语言版本的基本上在 80kcg/s,msvc 的基本在 70kcg/s 。 ( color per character ) |
8
thefack 2021-07-05 14:06:51 +08:00
我想说偶尔 PS 打开要等 5 秒以上是什么情况,虽然启动时要加载一个自己编写几个 function,也不至于这么慢啊
|
9
Kobayashi 2021-07-05 14:10:50 +08:00 via Android 7
友情提示:
1. 标题以偏盖全,原文性能差只针对彩色字符渲染 2. 没有浏览完整 issue 希望您能谨慎评论。 隔行如隔山,我不懂游戏渲染也不懂终端字符渲染就不说啥了。 |
10
b1iy 2021-07-05 14:35:16 +08:00
一个免费的东西,对我来说完完全全够用,我喜欢就行了。
|
11
hafuhafu 2021-07-05 15:08:11 +08:00
我没搞明白,为啥每次 wt 加载配置文件需要 2-3 秒左右的时间...明明只加载了 oh-my-posh
|
12
mxalbert1996 2021-07-05 15:11:45 +08:00 via Android 3
@hafuhafu 先分清楚 terminal 和 shell
|
13
Leviathann 2021-07-05 15:13:37 +08:00
@byte10 这个我在 wsltty 上比较常见,就是全屏内容完全刷新的话,经常会明显看到内容是从上往下刷新的。
|
14
hafuhafu 2021-07-05 15:15:08 +08:00
@mxalbert1996 #12 就是因为 WT 啊...我直接开 Powshell 在 1 秒内。用 WT 开 Powshell 要 2-3 秒。
|
15
12101111 2021-07-05 15:27:46 +08:00 2
看来上面有不少人连 shell 和 virtual terminal 都分不清楚
wt 烂似乎是因为微软用 DirectWrite 绘制文字, 但是 DirectWrite 实际上会考虑大量在终端上用不到的特性, 一些很快的终端(比如 Alacritty)压根就不支持连字这些特性, 但是 DirectWrite 支持. 说道屎山这件事, Windows NT 确实存在大量的屎山, 但是 wt 和 Windows 11 绝对是铲除屎山的行动, 像 std::String 这种东西过去在 NT 里是不可能出现的. |
16
MrKrabs 2021-07-05 15:41:58 +08:00
cmd 输出不就很慢嘛,还记得输出个 ffmpeg full help 就要半天
|
17
toptyloo 2021-07-05 15:47:16 +08:00 11
标题党,另外你用 terminal 项目的 issue 要怎么论证 Windows 11 会很烂?
|
18
dfkjgklfdjg 2021-07-05 15:49:33 +08:00
一座大屎山这个真的,你放弃向后兼容,一堆骂你的,你不放弃也是一堆骂你的,唉。
|
19
HankAviator 2021-07-05 15:49:57 +08:00 via Android
@Helsing 调 windows 的或者自己下一个最新的 adb 放好就行了啊,问题出在哪里
|
20
charlie21 2021-07-05 16:02:33 +08:00
哪方面的性能低
这方面的性能低所带来的影响是什么 ( 渲染性能 2 fps 带来的影响是什么,是不是阻止人们在终端里看彩色视频会很卡?还是有什么除了 “在终端里看视频” 之外的别的需求 有这部分需求的人有多少 占多少百分比,是不是一个可以抛弃的用户类 满足了这类特殊需求个体有什么好处,特殊需求个体乐意支付多少钱) |
21
bthulu 2021-07-05 16:11:50 +08:00
@charlie21 影响我在终端里打字, 我打字快的时候, 1 秒钟能打好几个, 2fps 就是我打的快的时候, 看到的文字就是闪现式的
|
22
6IbA2bj5ip3tK49j 2021-07-05 16:14:51 +08:00
@charlie21 cat/tail -f 大文件的时候,Windows terminal 就不够流畅。
Windows terminal 的水平在 linux/Mac 下看,压根不及格 🤷♂️ |
24
Helsing 2021-07-05 16:16:27 +08:00 via iPhone
@HankAviator #19
wsl2 的 IP 会变,以前 wsl 那种调用 adb 的方式不行了。 网上找的修改 adb 端口的脚本也不生效。 这个问题的 issue 还在 GitHub 上挂着呢 |
25
matrix67 2021-07-05 16:22:12 +08:00
@sneezry 对的,如同之前 GTA5 线上模式加载缓慢是因为 R 星渣优化 https://v2ex.com/t/757088
How I cut GTA Online loading times by 70%: https://news.ycombinator.com/item?id=26296339 这个真是经典。 |
26
HankAviator 2021-07-05 16:24:44 +08:00
@Helsing IP 变是 wsl2 的已知问题,没办法(狗头)不过 IP 变化的问题是在哪?
|
27
rioshikelong121 2021-07-05 16:39:54 +08:00
wsl2 的 memory leak 问题解决了么。
|
28
zlbruce 2021-07-05 17:07:17 +08:00
看了视频,差距确实很大,而且不仅仅是颜色的输出,而就是普通文本的输出。
refterm 也没有做过 profile,所以应该是性能的最低标准,从这来看 WT 实在是不够看。 另外,终端的输出性能,是能够影响程序输出到标准输出的效率的,难道不是一个终端的重要指标吗? |
29
name1991 2021-07-05 17:09:39 +08:00
在用 window terminal,但是没感觉到明显的性能问题,是我的使用方式不一样?
|
30
zhea55 2021-07-05 17:51:06 +08:00
我在用新版 windows terminal,界面美观。目前发现的唯一问题是,有时候光标莫名其妙的消失了。
|
31
learningman 2021-07-05 17:53:19 +08:00
VSCode 里还有一套长得跟 jQuery 差不多的 API 咧。。。
|
32
ikas 2021-07-05 17:56:21 +08:00
You were overly confident in your opinion, but I hope this website helps you understand that it's actually really damn hard.
--- 上来就搞个大新闻标题?送给你上面一样的话 |
33
zk8802 2021-07-05 18:32:40 +08:00 via iPhone 5
如果修复这个问题真的这么简单,那就请和 Casey Muratori 相同看法的人花点儿时间读一下相关代码,然后交个 PR 嘛。
工程上很多东西是没办法追求完美的,特别是在大公司里,归根结底是因为通向完美的路很遥远,而每个人和每个团队的精力都是极其有限的。极少有人愿意为了把一个功能做完美而加班。像 conhost 这种已经在维护模式,还被很多其它项目依赖的项目,要做大修改一定是需要走正式的立项流程的。在写代码之外也有不少精力是不得不花的,因此工程师必须做权衡才可以。 最后,很多嘲笑 Windows 是屎山的人没有错,但是他们往往忽略了微软在维护传统程序兼容性方面下的功夫。要解决屎山且不考虑兼容传统程序,难度比解决屎山且维持兼容性大非常多。从这个角度出发,Windows 对屎山的控制与解决做得比 Adobe 、Intel 以及绝大部分设备驱动好得多。 |
34
cest 2021-07-05 18:53:23 +08:00 1
|
35
zk8802 2021-07-05 18:58:18 +08:00 via iPhone 4
另外针对那个 GitHub issue 和 HackerNews 上的某些评论说几句:Be nice. 纯技术讨论不代表就要 present yourself as a dick. 归根结底读评论、写代码的都是人,没人喜欢不友善的评论。不友善的评论往往会让讨论偏离原本的方向,从技术评论变成了对自尊心的维护。
|
36
volks 2021-07-05 19:16:26 +08:00
「 because we've made it hard, not because of some intrinsic quality of the universe. 」是“他还只是个孩子,没看到他的努力吗”这个意思吗?
|
37
akira 2021-07-05 20:06:07 +08:00
wt...真的有谁在用么。。
|
39
LokiSharp 2021-07-05 23:30:04 +08:00 via iPhone
真有人用这玩意?
|
40
mmdsun 2021-07-05 23:39:16 +08:00 via Android
说 Win 代码乱的 大杂烩 屎山的。完全是无稽之谈。搞得像看过 win11 源码一样。
Windows 早就 UI 和内核分离的。一个 experience pack 包直接升级 UI,还能把 Win10 界面变成 Xbox UI |
41
smallthing 2021-07-06 00:03:19 +08:00
虽然慢,但是也不至于 fps 只有 2 啊???
Glyphs: 3k Bytes: 131kb Frame: 1234 Prep: 0ms Write: 6ms Read: 0ms Total: 6ms [F1]:write per frame [F2]:color per char TermMarkV1: 286kcg/s (11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz Win32 VTS) |
42
smallthing 2021-07-06 00:06:15 +08:00
@LokiSharp why not ?
|
43
foMM 2021-07-06 00:16:29 +08:00 via Android
wsl2 搭配 wt 加 docker 比我的 2020 款 13 寸 macpro 运行 docker 快,我觉得挺好的。
|
44
mason961125 2021-07-06 01:03:37 +08:00
哈哈哈哈哈哈哈哈哈哈哈楼上吹 Mac 的 virtual termial 的真的用过 iTerm2 和 Windows Terminal 吗? iTerm2 卡成那个比样还好意思吹哈哈哈哈哈哈哈哈哈哈哈
|
45
IgniteWhite 2021-07-06 01:42:34 +08:00
@mason961125 离谱,iTerm2 是真的慢,但是 kitty 和 Alacritty 在 macOS 上又非常快。这个怎么讲,是 iTerm2 慢还是 macOS 里的 terminal emulators 慢?
|
47
SIGEV13 2021-07-06 05:20:49 +08:00
windows terminal 现在的帧数已经远远超过我显示器的刷新率,为啥要关心性能问题??
|
48
way2explore2 2021-07-06 05:26:15 +08:00 via Android
|
50
yEhwG10ZJa83067x 2021-07-06 09:07:54 +08:00
|
51
wms 2021-07-06 09:10:21 +08:00
@zhea55 复制粘贴一坨屎, 右键一坨屎, 选中一坨屎,新开标签页,目录都是默认的,而不是上一个 shell 的, 跟 Linux 下的终端比起来,差距还很大
|
53
cxshun 2021-07-06 09:33:44 +08:00
看了一下视频,确实差别有点大。
但话又说回来,屎山代码这是肯定的,毕竟微软的包袱那么大,10 年前的应用放到 windows 10 或 windows 11 上面照样跑,放到 osx 上,未必就可以。举个例子 proxifier,升级到 big sur 就搞得之前的用不了了。 要是 windows 能像 osx 一样,不用考虑那么多的兼容性,直接抛弃之前的,那我觉得挺好的,只是到时又有一堆人骂的了。 PS:我是 osx 和 windows 双修党,最近打算抛弃 mac 。 |
54
Cloutain 2021-07-06 09:35:54 +08:00 1
Windows11 中依然存在许多老代码老库,但是 Windows 强大的兼容性得以保证他在市场的地位。NT 内核的代码还是相当高水平的,学习操作系统主要看的是 NT 的代码,给了我不少启发。
|
55
lxrmido 2021-07-06 09:37:24 +08:00
最近我很后悔
mac 自动更新了 bug sur,pc 自动更新了 win11 我的生活从此充满了惊喜 |
56
keepeye 2021-07-06 09:40:10 +08:00
性能就算了,我一直期待的可以在命令执行过程中右键清屏或者快捷键清屏的功能一直没有,相关 issue 已经挂在那里几年了
|
57
cxe2v 2021-07-06 09:42:14 +08:00 1
感觉 V2 上互联网的码农比较多,接触代码的层面都在应用层吧,但凡多接触点深层次的,也不会认为 windows 是屎山,OS X 那种抛弃包袱的才是真正的屎山,这也是为什么工业商业上 windows 占比比 OS X 大得多的原因
|
58
pcmgr456 2021-07-06 09:42:58 +08:00 via Android
别问,问就兼容性好
|
59
dreamramon 2021-07-06 10:59:59 +08:00
@IgniteWhite 自从看到了这个之后,我已经从 iterm2 迁移到 kitty 1 年了,kitty 非常快。
|
60
YIsion 2021-07-06 11:00:22 +08:00
我曾经用 windows termianl 的定时关机命令把我的系统干掉了
|
61
MaverickLee 2021-07-06 11:23:06 +08:00
@lxrmido #55 没有加入 Windows Insider 都能自动推送并升级???
|
62
myCupOfTea 2021-07-06 11:34:08 +08:00
window terminal 开源的吧,完全可以提 pr 啊
|
63
haiyang1992 2021-07-06 11:37:58 +08:00 via Android
我就想问有没有人遇到过 WT 经常打字几秒没响应的情况,基本都在 WSL2 环境里
|
64
u011631336 2021-07-06 11:43:21 +08:00
为啥我觉得挺好用的
|
65
learningman 2021-07-06 12:01:26 +08:00
@lxrmido #54 Win 11 又没推送,除非说你是在 Dev Channel
但是如果你在 Dev Channel,那生活不本来就是充满惊喜。。。 |
66
bxb100 2021-07-06 12:07:06 +08:00
总结就是提出问题很简单, 解决很难, 这波我谁都不站
|
67
subpo 2021-07-06 12:28:34 +08:00
不然用啥呢,颜值就是正义
|
68
libook 2021-07-06 12:33:09 +08:00 1
对于微软的产品风格已经习惯,现在肯拥抱开发者和开源社区已经是不小的进步了,慢慢来呗。
我在 Windows 下是用 Cygwin 装 XServer,然后在 WSL2 下开 Terminator,做了个脚本可以在 Windows 下一键打开,使用体验几乎和在 Windows 下开程序差不多,支持窗口停靠操作。 要说终端模拟器还是 Linux 下的成熟,毕竟打磨了那么多年。 我是觉得关于 WT,与其说是一个产品,不如说是一个营销(不是贬义),毕竟 Windows 自带的 CMD 和 PowerShell 一直都被各种嫌弃,现在出了个 WT 相当于是给广大开发者表决心,就是愿意做出改变。 最后很多人都指出来了,WT 是个 MIT 许可证的开源项目,MIT 给了使用者自由,但也同时进行了免责,很多 MIT 项目都会跟使用者说:“我们没有任何义务来满足任何人的需求。”所以如果现有维护人员没有修改的意愿,提出问题的人也可以尝试自己做解决方案然后提 PR,如果 PR 也不被接受的话也完全可以保留授权信息做分支项目,像某著名赛博出国项目就是这样,一波三折分出来几代独立项目,按照各自的意愿分别维护,这也是开源带来的好处之一。 |
69
DeWjjj 2021-07-06 12:35:42 +08:00
你可以选择 powershell,比 terminal 强很多。
我是因为 touch 不了,不想写 echo>而选择了 ni 。 |
71
binbinyouliiii 2021-07-06 13:58:10 +08:00
@wms #70 下一版本自带 xserver
|
72
wms 2021-07-06 14:01:30 +08:00
@binbinyouliiii 那里的消息,这么爽,那岂不是更不需要 WT 了
|
73
binbinyouliiii 2021-07-06 14:02:52 +08:00
|
74
lxrmido 2021-07-06 14:10:21 +08:00
|
75
generic 2021-07-06 14:17:54 +08:00 via Android
@keepeye 系统自带不会做这些花哨功能的。gnome, kde 自带的终端也没有。趁早转第三方软件吧。
|
77
IgniteWhite 2021-07-06 20:46:01 +08:00 via iPhone
|
78
hronro 2021-07-06 22:46:57 +08:00
现在最快的 terminal 应该是 Alacritty ?
有没有人拿 Alacritty 和 WT 做下 benchmark 来对比? |
80
zeni123 2021-09-10 21:02:09 +08:00
feel free to raise a pull request 。 开源项目有 idea 就自己开 PR
|