Emacs在Windows下启动非常慢!

emacs在linux下体验很好,但是在Windows下启动速度奇慢无比,请问有什么好的解决方法吗?

可以考虑使用 WSL

2 个赞

好的,我试试看

设置下字体,可以在论坛里搜索字体设置。但要达到 Linux 的速度体验,还得上 WSL。

我现在还是主要用 Windows 原生 Emacs,启动慢点无所谓,我现在的启动时间是 8s 左右,同样配置在 Linux 上是 3s 左右。但是如果有需要恢复的 session,一般就要 18s 左右了。

启动慢还有一个原因是加载 org-mode 的各个模块。
我在 early-init.el 中加入了 (setq org-modules-loaded t) ,不让加载其他的 org 模块。

2 个赞

刚好在某乎上看到这个,共同学习一下: 降低 Emacs 启动时间的高级技术 - 知乎

2 个赞

我在启动过程中调整了GC的相关设置,目前启动时加载的包时32各,启动时间平均是0.6秒(Emacs自己统计的结果),

实际感受,会稍微长一点,不过也可以接受了。

win原生是不太行,我现在切换到wsl2了,总体而言比较流畅。

另外我装的包比较win原生的要少多了。

有兴趣可以编译一个native-compile的,据说还要快很多。

2 个赞

我在win10上用pretest 28.0.50原生版本。.emacs.d目录在笔记本nvme ssd盘上。emacs目录在笔记本的sata ssd上。

  1. 第一次启动大概5、6秒,第二次3秒以内。
  2. 用pdump会更快,但是update package后就要重新生成pdump文件,有点麻烦,基本不用。
  3. native-comp只会更慢,毕竟要把一堆eln加载到内存。启动后的运行速度比elc快。

跑个benchmark看看到底是哪里慢,如用benchmark,在init.el里面加上

(require 'benchmark-init-modes)
(require 'benchmark-init)
(benchmark-init/activate)

启动后 M-x benchmark-init/show-durations-tree 看看,如果时间比较长,可以把配置文件拆分后,再跑。

3 个赞

我也已经开始用wsl了,但是wsl有点小问题就是eaf装不了,因为npm的安装会被windows侧干扰,所以现在wsl的emacs里只装了orgmode。

可以做到Windows原生版启动1或2秒左右。Cygwin版本4秒或5秒。 其他操作系统0.5秒以内。当然这也取决于硬件。在我i3 cpu的老电脑是这样的性能。 具体技术主要也就是autoload, with-eval-after-load, idle load也使用了一些.

还有一些小众的技术不便于展开,可以看doomemacs的wiki,看我的emacs.d的历史记录也可以。个人建议对于小众技术在掌握Emacs Lisp前不宜钻研太深。直接使用成熟的发行版(distribution)就行了。

3 个赞

最近使用 use-package 优化了配置,在Windows 上 emacs-init-time 的结果只有 1.559931 seconds 但是实际上,从点击 Emacs 图标到能看到光标,鼠标能动需要的时间是 9s 左右。

同样的配置,在 Mac 上 emacs-init-time => 0.8s ,实际体验是 3s 左右。

目前是在wsl2终端下使用emacs-nox,感觉还可以,操作虚拟机内的文件速度非常快(指magit),就是终端下的org-mode不好用,我还留了一个Windows的原生emacs,仅保留org-mode相关配置

Windows 下我主要用的多还是 org-mode ,需要能方便的访问 Windows 系统的文件,所有还是舍弃不了 Mingw64 的 Emacs。

最近 Windows 11 正式版刚发布,准备升级后尝试下最新的 wslg

wslg里无法调用Windows端的输入法

输入法好解决,我是用 emacs-rime的。

1 个赞

4k分辨率下wslg中emacs的GUI非常模糊

发现这些包在 Windows 10 下启动非常耗时。同样配置,实际启动时间 Linux 上 4s ,Windows 上 35s

不知道有没办法延迟加载 像 tramp 这样的内置包,因为很少用到。还有 python 的 加载是不是因为 ob-python的加载引起的?

6049.477                    ob-python                              1513.987
6083.528                    python                                 1479.126
6144.430                    tramp-sh                               1269.419
6198.424                    tramp                                  1205.274
13996.886                   org-roam                               861.025
4777.729                    ob-C                                   698.454
4856.789                    cc-mode                                618.675
12140.113                   flycheck-package                       592.026
12144.559                   package-lint                           587.239
6553.617                    trampver                               577.791
288.871                     package                                503.808
5476.194                    ob-calc                                485.203
14181.200                   emacsql-sqlite                         458.502
....  more                  .... more                              ...more

原来是 org-roam 在 after-init 后的启动,带动了 org-mode 一连贯的加载。 让 org-mode 懒加载就好了。 现在 Windows 上的启动时间控制在 10 s ,能接受了 :smile:

还有一个包叫 auto-compile ,会严重影响 Windows 下 的Emacs 以及 org-mode 启动,因为它要扫描多次 load-path,而这个动作在 Windows 系统的成本很高,装的包越多,影响越大。

如果安装了这个包,同时需要在Windows 下使用原生 Emacs 的,建议尽早删了它,得不偿失。

2 个赞

在windows下原来9s,禁用了7s,省了2s。 :muscle: