roam让emacs首次打开文件时间变长

org-roam随着文件增加,文件达到7000个时,出现开启emacs的时间增长:

问题描述:

1,在config.el文件中,如果 (require 'org-roam-protocol),则doom的开启时间增加40多秒。只好先注释掉它,用的时候再开。

2,在config.el文件中,只设置了(setq org-roam-directory “~/org/roam/”)「「此目录有7000个小文件」」,打开doom的时间没有增加,但第一次打开文件的时间增加了40多秒,然后再打开文件的时间没有增加。

环境是mac ,新安装的doom。

请问怎样查找原因呢?

估计是第一次打开文件的时候运行了(require 'org-roam-protocol),这个躲不掉,你总要加载这个包吧。

有道理。谢谢!

不过,即使第一次打开的是config.el,也需要40秒,也太长了。

这个(require 'org-roam-protocol)不是应该打开org文件才打开的吗?

另外,roam的性能也太弱了,7000个小文件就这样子了。

试试添加到incrementally-load,这样会稍微好点。不过如果你想一打开doom就能用Roam,那还是一样。这跟roam性能没啥关系,想用的话该加载的包总要加载,40秒多半是加载整个orgmode和一大堆相关包的时间。

加载Org也就几秒钟,不可能是Org的锅。多半还是org-roam要在加载的时候初始化什么东西才这么慢。

不是org,我把roam和org分开了,org的加载时间不长。

刚才以为是org-roam加载时或许会重新做一遍数据库「org-roam.db」,但看了一下文件修改时间,没有变化。

怀疑是org-roam加载时,遍历了一遍~/org/roam/的文件。

如果修改~/org/roam/到一个空目录,就没有这40秒了,证明文件越多,时间越长。

Messages里也看不出啥:

Loading /Users/chinhant/.emacs.d/.local/cache/recentf...done
Session restored. Welcome back.
Updating buffer list...
Formats have changed, recompiling...done
Updating buffer list...done
ibuffer-projectile: groups set

可以看看org-roam的源码。M-x find-library RET org-roam-protocol

2 个赞

内容比较短,这段可能相关。

(defun org-roam-protocol-open-file (info)
  "This handler simply opens the file with emacsclient.

INFO is an alist containing additional information passed by the protocol URL.
It should contain the FILE key, pointing to the path of the file to open.

  Example protocol string:

org-protocol://roam-file?file=/path/to/file.org"
  (when-let ((file (plist-get info :file)))
    (raise-frame)
    (org-roam--find-file file))
  nil)

找到解决方案了,在这里:垃圾处理

在配置文件中增加一句:

(setq org-roam-db-gc-threshold most-positive-fixnum)

40秒缩减成2秒左右。

4 个赞