2个鲜为人知的提高 Emacs 启动速度的步骤
在初始化文件的头部添加 set gc-cons-threshold 100000000
gc-cons-threshold
指定了垃圾回收前允许有多少字节的 consing,这个值一般是800000bytes,但是这会使得我在 Emacs 启动期间调用多达39次的垃圾回收,而垃圾回收的过程又巨慢无比。
我有 16G 的内存,因此我把这个值设置成了大约 100MB。现在我的 Emacs 在启动期间根本不会发生垃圾回收过程,这使得我的启动时间加快了600毫秒。
将你的配置文件嵌入 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毫秒。
如果你愿意重现编译Emacs的话,你还可以这样做
应用这个https://gist.github.com/bsuh/e7cba8a61f482b8d8687][补丁
Emacs 在加载 el 文件(也许加载 elc 文件时也是这样)时使用的,会用 getc
函数从FILE中读取字符。
getc
由于使用了锁机制因而是线程安全的。然而在单线程中循环调用 getc
就显得没有必要了。
我将 getc
替换成 getc_unlocked
之后,启动速度又提升了200毫秒。
整体来说,我的启动速度从 1.5 秒缩短到了 0.5 秒。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
更多
发布评论