为何 WSL 默认终端输入体验比其它应用好?
(给Linux爱好者加星标,提升Linux技能)
转自:开源中国
一名开发者(下用 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 默认终端输入速度更快的原因。
推荐阅读
(点击标题可跳转阅读)
看完本文有收获?请分享给更多人
关注「Linux 爱好者」加星标,提升Linux技能
好文章,我在看❤️
- 设置tomcat的默认项目名称(默认应用)、端口号,访问连接(url)不需要输入项目名称、端口
- Tomcat启动时默认打开你自己的web应用,输入域名或者IP可以直接访问项目不需要再后面加上项目名
- (附代码)根据输入信息构建不同人种类,统一打印不同国家地区的身高、体重信息(泛型数组应用,多态、重载、泛型、反射等概念体验)
- 应用加速器确保服务体验 伟库网派送终端守护神
- 设置tomcat的默认项目名称(默认应用)、端口号,访问连接(url)不需要输入项目名称、端口
- 怎么让mac终端输入python默认打开python3
- 微软为.NET程序员带来了最优的跨平台开发体验-WSL
- Avro技术应用_8. 混合模式 - MR 输入/出文件为 Avro类型 -- 待完善
- ubuntu下自定义终端默认大小和位置的方法
- 谈谈java终端获取输入
- (跳转到其它应用)关于iPhone中的一些自嗨方法(*^__^*) 嘻嘻……
- 控制台输入 Scanner类的应用
- WIX(20121031) 应用设置默认变量
- Zend Studio 默认模板和输入代码提示时间的修改方式
- 为何用户体验无法被设计,如何为用户体验设计
- 简化shell终端命令输入的脚本式快捷键工具
- 文件数据输入输出流对象的简单应用(DataOutputStream和DateInputStream)
- 8款超酷体验的jQuery/CSS3应用插件
- android关于EditText取消默认焦点及触摸其它地方去掉光标隐藏键盘问题
- 一顿操作猛如虎!云原生应用为何如此优秀?