折腾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 整体思路 在我的配置里:
- 使用makefile安装,关键的代码就是这句了,重要的就是
--batch
,因为在核心的入口文件入口函数会接受一个参数noninteractive
这个参数就是在–batch为t 不是就是nil 所以启动第二次从gui启动emacs 它就是nil 用来判断跳过初始化的一些设置
install:
$(emacs) -Q --batch -l 'init.el'
- 核心的入口函数比较重要的东西
(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!