最近调试配置的时候发现这个 (package-initalize)
很耗时间
这是我的配置
(require 'package)
(setq package-archives
'(("melpa-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")
("org-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/")
("gnu-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
("gnu" . "http://elpa.gnu.org/packages/")))
(package-initialize)
发现把 gnu
的地址拿掉会加快不少,想问问大家都是怎么处理 (package-initalize)
的,
通常怎么优化这个配置,可不可以不加载这个啊?
VonFry
3
initialize 应该不会特别慢,它只是读 content 然后写入内存。你说把 gnu 拿掉快,问题应该是出在 refresh 上。比如说你如果每次对应的 contents 文件在关闭时都会删掉,那每次都要 refresh 拉一次就会读网络比较慢。或是你配置里显示调用了 refresh。
如果你不用 package 来管理包就不用这个,比如说自己把所有要的包下载到哪里然后手动加 load-path。或者用 nix 这种工具,把插件部分导进同一个目录内,这样只需要一个 load-path 就行了。
Youmu
5
package-initialize
花费时间还是挺多的,用 esup 测试过,大概会花 0.2s 在它上面。而且正是因为 archive-contents
文件太大,而 elisp 执行速度慢,综合下来就会使得这部分可以被明显地观察到。
find ~/.emacs.d -name 'archive-contents' -exec wc -l {} \;
# 5046 /home/condy/.emacs.d/elpa/archives/melpa/archive-contents
# 3060 /home/condy/.emacs.d/elpa/archives/gnu/archive-contents
# 834 /home/condy/.emacs.d/elpa/archives/nongnu/archive-contents
在我这里只使用了 melpa, gnu 和 nongnu 的情况下就已经接近 9k 行了。
Youmu
6
是可以不调用,因为 package-initialize
主要做了两件事情
- 加载 (
activate
) 本地已下载的包
- 读取
archive-contents
而第 2 点通常不是那么重要。
1 个赞
用straight,不需要配置package.el,没有package-initialize
的烦恼,所有包又能统一通过git下载,比较省事。