org-roam 启动的时候配置 了 org-roam-db-autosync-mode
每次从新启动的emacs 的时候再执行都会重新索引一遍org-roam-directory
可是我在关掉emacs的之后并没有再动这个文件夹下面的东西,
(use-package org-roam
:ensure t
:defer t
:config
:bind
(("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)
("C-c n r" . org-roam-node-random))
:custom
(org-roam-directory (file-truename "~/.emacs.d/learning/emacs/org_roam/org-roam"))
(org-roam-capture-templates
'(("d" "default" plain "%?" :target
(file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
:unnarrowed t)))
)
你试试这个呢?我这用的很好。
(add-hook 'after-init-hook 'org-roam-db-autosync-enable)
实在Windows下面吗,Linux下没有这个问题,
这条命名在Windows下执行的过程中会被卡死 ,你说的这种方法我试过 ,导致的结果就是emacs的启动时间从3秒变成了17秒
Linux 和 Macos 下没有问题,我都是用的这个。。。windows上,不知道,我己经放弃在windows 上使用 Emacs了,体验不好,反应慢。
1 个赞
你可以尝试使用下这个包,on。它提供了on-first-find-file-hook,这样就只会在你打开文件的时候执行org-roam-db-autosync-enable。不要使用 after-init-hook,这样就不会影响emacs的启动了。
2 个赞
哪个包?
我猜您的解决办法还是必须执行org-roam-db-autosync-mode 的,只要这个函数执行必定要花费长达10几秒的时间,我看相关的讨论还会随着节点的上升不断时长增加
org-roam有一个逻辑,就是检查是否文件下下面的文件产生了更改,如果是则更新sqlite ,否则直接启动,我现在的想法是,如果是在Windows环境下,干脆就不检查了,直接更新
我一直在 Windows 下用 org-roam,一切正常。
其中 (org-roam-database-connector 'sqlite-builtin)
需要 Emacs 29,可以忽略。
你可以参考下我的设置:
请问您的 (org-roam-directory (file-truename “~/.org/org-roam”)) 这个配置在git 的控制下吗?
这样 来看能用的只有这一个配置(org-roam-db-gc-threshold most-positive-fixnum)
我也尝试了,用途不大
你的启动慢可能跟org 有关,不仅仅是 org-roam, 你可以看下emacs 启动都加载了哪些包,org 中有些包会导致 emacs 启动很慢。
这个是用 git来控制,不同平台之间共享。
org 在 Windows 平台启动慢是正常的,因为要加载一堆模块。
我是设置了这个 (setq org-modules nil)
,就可以不加载那些模块,可以缓解一些。
绝对不是,我做过这样的测试,关了autosync 然后再执行打开,还是慢,很慢,一样的慢
但是我还是认为和org 的载入无关,因为我尝试过在载入所有的org package之后在执行 ,还是很慢
因为你用了懒加载,第一次加载 org-roam 就是慢的,在Windows 系统这样问题更加突出而已。
如果第一次加载org-roam 的时候,你从来没加载过 org mode,加载 org mode 的时间叠加在一起,就更慢了。
我现在用 Emacs 29 ,org-roam 使用内置的 sqlite实现,要好一些,但还是慢。反正就慢一次,无所谓了。
如果想快,就用 Linux 或者 WSL
用 benchmark-ini 或 esup 测下包的加载时间不就知道了吗
一样的问题, org-roam第一次加载扫描数据库的速度太慢了, 可能只有emacs 29里提供了更好的sqlite的包才能解决.