近段时间使用 pdumper 的总结

可能有同学对这个话题感兴趣。我在这里稍作总结,平台是Windows,欢迎大家批评指正。想交流或者提问可以留言。

为什么要使用 pdumper?

最主要的原因是Windows平台下 emacs 启动的速度太慢,Windows 下启动 350 个左右的包的 spacemacs 平均在120s以上(非SSD)。当然这和我的配置肯定有关系,但是即使再优化,启动时间 40s 以上肯定是有的。这个已经是无法容忍了。

使用pdumper的话启动时间直接缩短到3s左右。曾经也有过1s多点,但是配置变了以后再没有1s了。3s对我来说已经够用了,所以没有深究其中的原因。

另外用 pdumper 版本可以不用 lazy load 了,先将 orgmode,python-mode 等启动较慢的 mode 加载后再 dump,之后打开这些 mode 就快多了。

使用pdumper的主要痛点

  1. 无法使用 profiler。profiler 是一个非常有用的工具,但是 pdumer 版本的 emacs 无法使用,这是一个已知的 bug,目前还没有解决方案: http://lists.gnu.org/archive/html/emacs-devel/2018-02/msg00451.html

  2. 无法使用 url-retrieve-synchronously。这也是 pdumper 版本独有的 bug,但是和上面的不同,只要不是从 pdmp 文件启动都不会有这个问题。

  3. 每次更新配置后都要重新 dump,这个比较麻烦。但是如果你不经常更新,那这也不是什么大问题。

非常感谢,我也一直尝试但不成功,已经放弃了,看到这个真想再捞起来

  1. 我是用官方27dumper,你成功的是那个版本?
  2. 改动了哪些配置?好像在快捷方式上要加个什么参数,但没什么效果
  3. 我的不成功是指:能生成一个dmp的文件,但下一次启动貌似没有调用之,还是和普通启动同样的时间。
  1. 我用的 emax64,比官方多支持了 imagmagick 等模块 https://github.com/m-parashar/emax64/releases

  2. 配置方面我用的 spacemacs 的默认配置,当然做了一些改动,但是都是细节方面,太多了不方便一一细说。

  3. 这个不应该吧,你怎样启动 dmp 文件的呢?dump 的文件有多大呢?

这个大概是什么原理,可以理解为像操作系统休眠那样把整个内存保存到磁盘,下次启动时直接加载那个文件?

嗯,应该是类似吧

各位大佬,听说dumper emacs在windows上启动飞快,可我找了半天 也没有发现dump-emacs这个函数呀,请问哪里有教程?不胜感激。

好像真的有诶,自己编译了一个pdump的分支,谢谢!有问题在来问

还是有问题,C-h f dump-emacs 能够找到该函数的说明,但是 M-x 却无法调出这个函数,何解?

M-x 只能调出command,不是所有subroutine都是command。

另外pdumper来dump Emacs的函数是dump-emacs-portabledump-emacs 是老dumper

可是连dump-emacs-portable 也没有

(dump-eamcs-portable "~/.emacs.d/emacs.pdump")

显示空函数

Debugger entered--Lisp error: (void-function dump-eamcs-portable)
  (dump-eamcs-portable "~/.emacs.d/emacs.pdump")
  eval((dump-eamcs-portable "~/.emacs.d/emacs.pdump") nil)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)

关于dump emacs的用法有没有个详细的教程呢?网上找了很久都没找到–!

不好意思,是我写错了,应该是

dump-emacs-portable

后续能dump出来一个文件,那么然后该怎么使用这个dump文件启动emacs呢?

emacs --dump-file /path/to/your/dumpFile 启动.

我也来尝试下pdumper,找教程,换emacs27,生成文件 emacs --batch -q -eval "(dump-emacs-portable \"d:/file/emacs.pdump\")" , 启动emacs --dump-file="d:/file/emacs.pdump", 然后感觉好像也没什么变化 ,生成的dump文件6.84m,这个对吗

image

因为你batch模式没加载任何东西,当然没区别

-q来dump等于没有dump。因为编译时就会把初始环境dump一次。

https://archive.casouri.cat/note/2020/painless-transition-to-portable-dumper/index.html 可以看看这个教程,我弄好了,启动速度从44秒到0秒

好的,very good

有谁同时用 straight 和 pdumper 的吗,能不能分享下配置。

我简单的把 dolist 下的 require 换成了 straight-use-package ,然后各种报错。难道要把 straight 目录下的所有文件夹都加到 load-path 里面?

我也是不懂怎么弄,最后妥协用回package.el了

为什么要改require?你应该改的是package-initialize,把它改成straight的初始化函数