为什么微软 WSL 的默认终端输入体验比其他同类的应用好?

一名开发者(下用 Nick 代称)在 Windows Terminal 的 GitHub repo 中发表了一个不是反馈问题的 issue —— 他只是好奇该终端拥有这种如此顺滑输入的效果是如何实现的。

Nick 觉得这种顺滑感是其他 Windows 应用都不具备的,甚至是最轻量的 notepad.exe 都未能提供这种输入体验。他还问到,这种 UI 增强功能将来是否会应用于所有 Windows 应用程序。

很快,负责此项目的 Windows 开发团队成员(@miniksa)对 Nick 的疑问进行了解答。

miniksa 表示,保持在 WSL 默认终端输入内容的速度比其他应用快,这实际上就是他们唯一的工作!除此之外,也可能是因为他们必须使用 Windows 最旧和最低级别的 API 来完成此项工作。

WSL 的默认终端不像 Electron 等框架那样涉及到许多其他的层或框架,它有一个并不特别的裸窗口,并且没有任何附加组件。他们会从窗口消息(window messages)而不是某种事件框架((WPF, WinForms, UWP, Electron))来处理键入的内容,而这些内容是通过内核传输过来的。接着,他们使用 GDI 的 PolyTextOut 将文本直接转储到窗口而不带多余的装饰。

miniksa 解释道,notepad.exe 确实很轻量,不过在其窗口上也具有多个控件,并且可能在编辑控件中使用某种库、框架来确定其文本布局(也可能正在使用其他库或框架进行国际化支持...),这些都使得它们的输入速度比不上 WSL 默认终端。当然,WSL 也需要进行权衡取舍,它不像其他应用那样提供完全的国际化支持。

为什么要这样做?第一,conhost.exe 已十分陈旧。它必须使用所有内容的裸机底层,因为它是在创建其他大多数框架之前创建的。第二,它需要保持尽可能底层的级别,而且它是用 C/C++ 编写的,它需要尽可能保持底层的状态以方便提供给第三方使用。

至于其他 Windows 应用是否有机会用上这种顺滑的输入效果,miniksa 觉得几乎是没机会。这些应用能够以一种简单的方式用任何一门语言来调用一种方法和布局文本(layout text),而无需手动计算像素或关心它们的字体该采用哪种样式。而恰好 miniksa 手动计算像素、滑动区域和数学应用区域等的方式正是使得 WSL 默认终端输入速度更快的原因。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/112320/why-typing-inside-wsl-terminal-better-than-every-other-app

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。