我的工作环境是win10通过samba挂载一个远端服务器,编辑服务器上的文件时如果有磁盘操作,则会出现非常长时间的卡顿。横向对比VSCode,Emacs会慢很多,这里是Emacs在保存文件时有什么额外的操作吗?或者有什么优化方案?
先用 profiler 看下
samba枚举文件的效率很低
我抓了,感觉profiler抓不出来,profiler抓到占用大的是minibuf的补全功能,实际上卡顿发生在保存的过程中
samba可能是不太好,但同样环境下vscode确实快了很多,不知道emacs有没有什么可以实现的优化
我觉得你最起码把profiler的信息贴出来,先量化再找瓶颈,大家配置都不一样,缺少上下文谁能定位出来问题。最简单的先用 emacs -q 测一下。
这个是用emacs -Q检测出来的结果,流程为 profiler-start
(cpu) → save-buffer
→ profiler-report
感觉这个 completion-pcm--all-completions
是我用tab补全 profiler-report 时调用的,速度应该是很快的,这个占用25%是不是表示没抓到具体造成卡顿的操作?
emacs -q 操作时卡么?
- 不卡,说明是你加载的自己配置造成的问题,正常加载自己的配置后再去profile,直至找到卡顿时的分析报告
- 也卡,说明emacs裸配置性能也不行,可能是emacs的bug,也可能是别的
emacs -Q时一样是卡顿的,应该是emacs默认的配置本身有问题,我主要是想问下有没有前辈遇到过这种问题,有现成的解决方案(比如关掉某些配置,或把某些参数配成特殊值)。
在资源管理器复制文件过去,看看速度如何?
如果资源管理器复制也是一样慢的话,那就是vscode做了优化,而Emacs没有。
只看save-buffer的cpu采样,vc-after-save
占了save-buffer
100%,每次保存时都要触发版本状态更新,这玩意看起来远程性能不好。
(defun my-skip-vc-refresh-test ()
nil)
(advice-add 'vc-after-save :override #'my-skip-vc-refresh-test)
;; (advice-remove 'vc-after-save #'my-skip-vc-refresh-test)
试下跳过远程文件的版本检查看看
ps:
在stackoverflow上看到另外一个内置profiler
M-x elp-instrument-package
M-x elp-results
跳过VC检查确实快了很多,之前保存耗时大概在5-15s浮动,现在大概只有3s左右了。大佬果然厉害