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

发布于 2023-05-04 13:29:57 字数 1189 浏览 39 评论 0

在初始化文件的头部添加 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

qq_eQNo9e

文章 0 评论 0

内心旳酸楚

文章 0 评论 0

mb_BlPo2I8v

文章 0 评论 0

alipaysp_ZRaVhH1Dn

文章 0 评论 0

alipaysp_VP2a8Q4rgx

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文