剑客
关注科技互联网

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

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

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

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

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: 如果你愿意重现编译Emacs的话,你还可以这样做

应用这个diff

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

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

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址