是否可以用`use-package`直接做incremental loading?

偶然发现use-package:defer关键字是可以设定一个数值,作用是N秒idle后加载包。

乍一看感觉这个功能可以用来实现简单的incremental loading(我理解的incremental loading就是把不紧急的包加载放到idle time),但是好像没有怎么在别人的配置里面见过这个用法。

请问坛友有使用这个功能的吗,能否分享一下体验如何?

用:command比较多, 直接延迟到实际调用某个命令的时候再加载

1 个赞

incremental loading 是有实际实践的,doomemacs 就利用这个对 orgmode 做 defer loading。不过不是通过 usepackage 的 :defer 实现的,是自己实现的。

楼上说的是对的,主要的 lazy-loading 是通过 lazy 加载某个 interactive 的命令来实现 (即首次调用这个命令时再加载其对应的包),一般很少会去搞这种 incremental loading。

doomemacs lazy-loading orgmode 的主要原因是 orgmode 即使是在你首次调用 org 的时候加载依然很慢一样要等很多时间,不如在用户启动后就在 idle timer 里面悄悄一个个把这些耗时长的包都加载了。

具体的可以看 doom 是如何选择 incremental load org 的包的顺序的:

实际上我觉得 doom 为了 user-friendly,有点过度包装了,我们自己的配置要借鉴的话,借鉴这个核心入口函数就够了:

比如:defer 1是emacs启动后,超过1秒空闲的时候再加载。我的evil设置的是defer 1。

1 个赞

感谢!很详细,看来是我把incremental loading想当然了,单纯的按idle秒延迟确实还是解决不了卡顿的可能性