EMACS-DOCUMENT

=============>集思广益

2个鲜为人知的提高Emacs启动速度的步骤

1 1: 在初始化文件的头部添加(set gc-cons-threshold 100000000)

gc-cons-threshold 指定了垃圾回收前允许有多少字节的consing. 这个值一般是800000bytes, 但是这会使得我在Emacs启动期间调用多达39次的垃圾回收!!!,而垃圾回收的过程又巨慢无比. 我有16G的内存,因此我把这个值设置成了大约100MB. 现在我的Emacs在启动期间根本不会发生垃圾回收过程,这使得我的启动时间加快了600毫秒.

2 2: 将你的配置文件嵌入(let ((file-name-handler-alist nil)) <init file>)中

file-name-handler-alist 的默认值为

(("\\`/[^/]*\\'" . tramp-completion-file-name-handler)
 ("\\`/[^/|:][^/|]*:" . tramp-file-name-handler)
 ("\\`/:" . file-name-non-special))

也就是说在Emacs在启动过程中加载el和elc文件时都会将其文件名与这些正则表达式进行匹配.

这使得我的启动时间又快了200毫秒.

3 3: 如果你愿意重现编译Emacs的话,你还可以这样做

应用这个补丁

Emacs在加载el文件(也许加载elc文件时也是这样)时使用的,会用 getc 函数从FILE中读取字符. getc 由于使用了锁机制因而是线程安全的. 然而在单线程中循环调用 getc 就显得没有必要了. 我将 getc 替换成 getc_unlocked 之后,启动速度又提升了200毫秒.

整体来说,我的启动速度从1.5秒缩短到了0.5秒! 真爽啊 :)