tramp为什么这么慢? 大家一起讨论一下

Emacs不能用高性能浏览器和PDF软件, 现在可以用EAF搞定。

Emacs用同样的 LSP 服务器没有 VSCode 流畅, 现在 lsp-bridge 性能和 VSCode 一样, 甚至多语言比 VSCode 还快。

Emacs最后一个慢的地方是 tramp, 我的理解 tramp 的工作就是一个 SSH 同步程序, Emacs主要是针对 Buffer 内容进行修改, Emacs 保存的时候, tramp 透明的保存到远端, 从原理上不应该这么卡呀?

有哪位同学读过 tramp 的源代码? 大家一起讨论一下为什么 tramp 那么慢? 或者除开慢, 大家最喜欢的是 tramp 哪些功能?

讨论清楚了, 我有可能明年有时间会开发一个高性能的远程穿透插件来替换 tramp, 看看顺带能否和 lsp-bridge 协作来实现远程高性能代码补全。

24 个赞

看启用了哪些package吧,比如project版本控制自动检测,自动保存,不仅仅是同步buffer内容

1 个赞

以前用过一阵子 tramp,嫌慢就放弃了。

.ssh/config 加上这几行应该会有一定程度改善。

Host *
    ServerAliveInterval 30
    ControlMaster auto
    ControlPersist 30m
    ControlPath ~/.ssh/sockets/%[email protected]%h:%p

改单个文件还好,用来写项目代码就不行了。

仅仅是project.el打开文件就十分卡

盲猜同步运行 scp 在本地于服务器之间同步文件。tramp 和 auto-save 一起基本没法用,一步一卡。

我自己用 tramp 时最讨厌的是,tramp 在每次保存文件的时候都会启动一个新的 ssh 连接,保存完就把这个连接关了。然而我的电脑离 ssh 远端距离很远,所以每次刷新文件延迟都很高。

以前查过有没有办法复用 ssh 连接,或者保持一个 ssh daemon,但是一直没搞定。

补充一下,我上面和这里说的都是 tramp 默认情况。

除了开关文件的高延迟,调用远端命令看起来也是一步一个 ssh 连接,所以非常卡。

如果 ssh 远端和本机距离近、网络好的话,tramp 的体验还是很不错的。以前用过 tramp+elpy 在远程机器上写 Python 项目,自动补全开箱即用,很爽。

是不是因为 ssh 的配置没加?

Host *
    ControlMaster yes
1 个赞

(我其实有类似的配置,不过好久没用过 tramp 了,所以不清楚有没有效。)

Host *
    CheckHostIP no
    HashKnownHosts no
    ControlMaster auto
    ControlPath /tmp/ssh-%C-control
    ControlPersist 1d
    ServerAliveInterval 60
1 个赞

大佬target 到我特别感兴趣的地方了!关注关注!

TRAMP 好像是依赖这个 start-file-process-shell-command 命令 (或者类似的命令) 在远程读文件,根本没有考虑 ssh 复用之类的情况。另外它还有一套自己的缓存机制,我感觉很累赘,根本不能解决速度的问题,反而很可能拖慢了初始连接的速度。我觉得就让 TRAMP 处理一些本机的 (sudo) 或者本地网络的东西,别指望它处理远程的东西,太慢了。很期待新插件!

tramp只适合修改单个文件,开project、lsp、flycheck之类的就很慢。

lsp可以把lsp server一并放远端。