2个鲜为人知的提高Emacs启动速度的步骤
Table of Contents
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秒! 真爽啊 :)