日常使用portable dumper

有没有人日常使用portable dumper?能不能分享一下配置? 继续讨论:

学习了一下Spacemacs,现在可以日常用portable dumper了。非常好用,我的配置有3x的提速,而且不像autoload,dump的包都是立即可用。迁移非常简单,我一共只改了~30行代码。

思路是只把启动就需要的包dump出来,比如company,ivy/helm,主题等等。

详细过程在博客里,这里简单说一下坑:

  • dump不保存load-path,需要曲线救国,dump的时候存到另一个变量里,在init里load回来
  • 用dump 文件启动Emacs,transient-mark-mode 和 global-font-lock-mode默认是关闭的,需要手动启动一下
  • 用dump文件启动,路径不能用~,比如emacs --dump-file=~/.emacs.d/xxx不行。
  • scratch buffer不太完整,我是这么解决的:
(add-hook 'after-init-hook
                (lambda ()
                  (save-excursion
                    (switch-to-buffer "*scratch*")
                    (lisp-interaction-mode))))

我得补充一下,3x提速主要是因为之前像company这些包都不autoload的。如果是autoload all the way的同学,dump对启动速度的提升可能没那么明显。(不过你再autoload,能autoload主题?加载一个主题就要0.7s(滑稽

7 个赞

好奇,乃现在的启动速度是多少呢?我200多个包,可以到0.8s…如果dump的话,感觉也没有提升的地方了

@Nasy 你说的对。相对高度优化的配置,启动速度不会有明显的提高。但dumper带来的优势是,所有dump过的包在Emacs启动完就等于加载完。一个包再怎么autoload,用的时候还是要加载的。这个时间不能忽略不计吧。有些包如果autoload处理得不恰当,不论Emacs启动多顺滑,用的时候多多少少会出现卡顿。dumper就没这样的问题。此外,更重要的是,根本不用再花精力考虑如何autoload,直接dump就好了。

1 个赞

为什么不用emacsclient的方式呢,感觉这样速度更快啊。 不管是GUI还是TUI,都可以秒开啊。

虽然daemon启动需要时间,但是dump也需要时间啊。而且就算是优化到0.5s,感觉也还是有个明显的打开的时间。

我其实很少重启Emacs,但是Emacs启动不如VSCode让我很不爽。

学习了。dump了下面的packages

(dolist (package '(use-package org org-crypt
                    benchmark-init-modes benchmark-init
                    gcmh
                    doom-themes doom-deeper-blue-theme
                    doom-modeline all-the-icons
                    ;; elec-pair
                    highlight-parentheses
                    winum
                    auto-compile 
                    helm helm-elisp helm-ag helm-swoop
                    ;; evil
                    evil-maps
                    magit
                    lsp-python-ms
                    lsp-mode))
  (require package))

在虚机,x11中从1.5s到0.8s。win10上从3s降到1.5s左右。

不知道在linux和win 10上,为什么加上evil后emacs就coredump。

我好像看见一个bug report,就是evil会导致segfault

谢谢。怪不得按你的blog使用pdump的时候,一启动就coredump。排除了几个package后发现evil有问题。

看了下,是因为undo-tree-mode

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=38912

win10上生成dump: emacs --batch -q -l e:\home\albert\.emacs.d\dump.el

启动:runemacs --dump-file="e:/home/albert/.emacs.d/emacs.pdmp"

去掉magit和lsp-mode后,1s能启动。反正magit、lsp-mode在win10上速度就慢,不差那点时间。

3 个赞

好的,先把global-undo-tree-mode去了试试。

(require 'evil)会启动undo-tree-mode吗?

这个report是我提的 :rofl: 本来想把pdumper搞进我的配置里,但在evil这里卡住了。看来还是高估了现实情况

建议大家去参考一下spacemacs的dumper配置。比较成熟,常见问题都解决了。哪些包有问题已经有人踩过坑了。

我看里面的讨论,100%完美dump配置过的Emacs不在Emacs 27.1的计划里,更完美的支持可能要等Emacs28了。不过只是dump一些包的话,现在完全没有问题。

对没错,完美的pdumper并不在人家的计划里。 不过,他们的计划列表到底是啥样的呢……

如果升级 ivy 或者 company,是不是要全部重新 dump?

对。需要全部重新dump,会花些时间。不过可以通过子进程完成,不影响正常使用。

dump也就二十秒,很快的

使用了一下,发现一个需要注意的地方,dump的环境跟实际使用的环境可能是不一样的,比如(display-graphic-p)的返回值