这个问题经常见,总结一下我知道的原因。写这个总结主要是方便今后回答Emacs社区里的提问

字体Bug

对于中文用户来说,字体Bug会导致Emacs变慢。这种情况常见于刚开始使用Emacs的新手,也给很多人造成了Emacs很慢的印象。如果您的Emacs在Windows下很卡50%的可能是这个Bug导致的,如果您是新手,可能性上升到80%。

解决方法:合理设置字体

进程模式和IO策略

Windows和GNU/Linux毕竟是两种不同的操作系统。GNU/Linux以及其他的*nix系统里,进程的启动非常快,处理大量的IO很快;而Windows正好相反,进程启动慢,对于大量数据量少的IO也慢。这个原因导致Emacs在Windows下操作文件和运行外部程序的时候慢。一个典型的例子是Magit,因为需要频繁启动Git,每个操作都要等好几秒。还有Tramp,我感觉也是频繁启动外部程序拖慢的。

另外,不论是Cygwin环境的Emacs还是用MinGW编译出来的Emacs,依赖的都不是微软的运行时,和系统自带的已经预先加载的DLL不同,也会导致Emacs以及其他程序变慢,这种慢主要体现在启动的时候。

总得来说,这个原因占30%的情况。

解决方法:貌似没有什么好的解决方案,只能对于具体的包和操作进行一些优化,可专注于优化Emacs在Windows下的体验的开发者太少了,而且根据Emacs的开发目标也确实不应该为Emacs做这种优化。

关于这个问题Reddit上有相关讨论

缺少功能

上面的两个问题是慢的主要原因,下面的都是些小问题,也不同程度拖慢Emacs。首先Windows系统缺少一些Emacs需要的功能,比如运行shell的时候只能用管道,因为没有PTY,也是慢的原因。

解决方法:这个问题很多时候是无解的。

键盘重复率

Windows的键盘重复率不能设的非常快,有个上限,也给人很慢的感觉,比如你用C-f光标向前,如果重复率慢,光标走的就慢了,而在Linux下虽然图形界面的效率可能低一点,但键盘快,你也就觉得快。这个问题我感觉无解,不知道萎软怎么想的。

图形界面

因为Emacs是移植到Windows上的,开发者关注少,等等原因,图形界面方面也慢一点。这种慢我感觉是比较次要的,毕竟现在的电脑速度都很快了。

编译

以前的Emacs版本特别是官方的,用的是开发不活跃的MinGW环境编译的,GCC版本和编译参数都跟不上,也导致慢。现在的版本基于MSYS2/MinGW-w64,编译参数也好了,这个问题基本解决了。

病毒、杀毒软件等

Windows系统偶尔会遇到这类问题。

总得来说,慢是可以预期的,是可以解释的,也可以部分解决。要想用的爽,早日拥抱自由的系统是正道。