从doom emacs中学习快速启动

折腾emacs3个礼拜了,这3个礼拜真是让我充实不少啊。。各种折腾。个人比较喜欢快速启动的配置,自己的vim配置lazyload了百分之98的插件。各种优化60插件50ms左右。所以折腾emacs也是启动速度尽可能往快了折腾,试用了doomemacs 启动真的是快200个packages 1s左右,打开闪一下就完事了。我就惊呆了。开始研究,成功折腾到自己的配置了,所以分享下研究成果:

doom 的启动速度在wiki上有解答,但是我想说他这个回答老了。doom现在的develop调整了不少,无意中在reddit看到作者回复doom最新的优化就去研究了下: 1.禁用了package-initialize 手动去填充path,这个path就是第一次安装的时候把所有的path缓存起来,第二次就跳过一些初始化的设置,直接加载。 2. 就是lazyload插件 3.大量的autoload 整体思路 在我的配置里:

  1. 使用makefile安装,关键的代码就是这句了,重要的就是--batch ,因为在核心的入口文件入口函数会接受一个参数 noninteractive 这个参数就是在–batch为t 不是就是nil 所以启动第二次从gui启动emacs 它就是nil 用来判断跳过初始化的一些设置
install:
	$(emacs) -Q --batch -l 'init.el'
  1. 核心的入口函数比较重要的东西
       (when (or force-p (not (boom-initialize-autoloads boom-au-files)))
        (boom-ensure-core-dir-exist)
        (require 'core-packages)
        (boom-ensure-packages-initialized force-p)
        (boom-ensure-core-packages)
        (require 'core-boom)))

前面和doom差不多 不过搬到自己配置肯定全般是不行的,第一次make安装的时候 noninteractive就是t就进去 不是就直接load缓存的path文件就好了,需要缓存的东西

  (prin1 `(setq load-path ',load-path
                auto-mode-alist ',auto-mode-alist
                Info-directory-list ',Info-directory-list
                package-activated-list ',package-activated-list)
         (current-buffer)))

然后使用with-temp-file 写到缓存文件里去,这里我把这个文件编译了成elc了,不过编译完还是el文件 不明所以。不过看了下是header写的compiled就不管了。。。 差不多这样就能帮你节省不少时间,其他的那些gc调整什么的大家都知道了应该,搜一下很多。doom里其他的代码就是一些封装的包管理和键位的一些宏,整体还是挺复杂的,不过自己的配置只拿关键的就可以了。

感觉在emacs的缓存和vim里差不多,我vim配置也是缓存了插件的状态,emacs里就是缓存很多path节省在这些上面的耗时,有想往自己配置里折腾的可以试试。 给doom respect!

7 个赞

大赞这种把思维过程写下来的,学习学习。

还行。不是很完全。比如doom 会扫描autoload 生成autoload文件之类忘说了,照着这个思路去doom上扒然后改一改就能用到自己配置里了。我自己的也用了不少doom 的宏,蛮好用的,现在稳定0.8s左右 155pakage,麻烦的就是新添加插件就要用make。。我把插件列表也缓存了