emacs在windows上启动慢真的是进程启动慢造成的吗

搜索“emacs在windows启动慢”的问题可以看到很多人都说是由于windows创建进程慢引起的,我之前也是这样觉得。
但是因为用猫哥开发的几个插件,python-bridge, blink-search ,启动总会卡5秒左右。
我就详细分析了下python-bridge的实现,细节可以看这个贴子
windows上使用lsp-bridge存在卡顿的情况
可以看到从emacs开始执行代码,到启动一个进程,到那个进程执行发起网络请求,都是在1秒内,至少人是不可感知的。
最后定位问题到了另一个奇怪的地方,还没确定。但至少说明emacs在windows上的慢和windows进程启动速度无关。
最后想说有没有大佬熟悉这方面的帮忙看看卡顿的原因。 :innocent:

我用最新的29,不是日常用,尝鲜用,配置用了陈斌兄的,我觉得启动速度很快,显示0.65s,但是实际用了两三秒才能响应,archlinux和win7都试过,archlinux是i7 4810mq,win7是奔腾g4400,非要说的话archlinux上面快一点

是的,所以我加了“启动”两个字,毕竟emacs是移植到windows上的。
用mingw编译的程序包括msys2自带的pacman我都感觉比linux上慢多了。

设置了windows defender吗

之前我在windows 上打开emacs 需要十几秒,而且前几秒是没有任何窗口被打开的。

把emacs 添加到排除项之后就没这个问题了

1 个赞

只装了个关闭所有防护功能的火绒

而且我只有加载lsp-bridge这几个猫哥开发用到了外部python的插件才慢,要是不加这几个插件,秒开不卡 :rofl:

用 python-bridge 试了一下,我也卡,估计是 emacs 创建子线程的时候卡了

不过不太清楚是 tcp 连接的时候卡,还是进程创建整个都卡,我觉得应该是 network 连接的问题

Emacs Windows 版本是通过mingw/cygwin 库已知的,天生对于底层调用就有损耗,尤其是对于IO操作。小文件读写尤其明显。我认为问题不在Windows本身,可能是出在中间lib上。

今天看大佬的配置发现有 w32-use-native-image-API 这种东西。对于其他操作我感觉也可以这样改进。有时间研究下

嗯,可以看我发那个issue,很明确是网络连接的问题。python子进程1秒内就创建好并发起连接了。
不过看另一个帖子里面,有老哥提到在他的某台电脑上不卡,玄学

回家用自己电脑会卡,系统是 Windows11 专业版,公司的 Windows10 企业版不会卡,应该是网络连接问题,但是不知道是哪个设置负责的

这样看来,我感觉几个可能造成影响的地方
1 系统代理设置
2 某个环境变量和网络相关
3 代码内部对dns进行了解析,之前看文章有提到,emacs中网络相关的操作都是异步的,但是dns除外

好像发现点问题,用wireshark抓包看了下,存在chong重用端口的情况,感觉应该是lsp-bridge的代码哪个地方有点问题,导致端口号重复了,反复启动

3 个赞

大佬厉害了,应该就是 dns 的问题,把代码中出现 localhost 的地方改成 127.0.0.1 就不卡了,你可以试一下

3 个赞

可以的,解决了,不容易哇, :hugs:

等猫哥把几个项目都修复下就爽了

3 个赞

已经修复, 感谢 @junmoxiao @xhcoding 两位大佬的调试。

@xhcoding 是我一票插件 Windows 分支代码的维护者之一, 还是大佬厉害👍

大佬厉害,我原来在emas org-mode中显示某个域名返回的org文本也感觉很慢,后来域名没了,没办法只能用ip ,反倒快了很多,导致我都不想用域名了,原来dns这一步还会卡emacs

1 个赞

说句题外话。 大佬六点钟起来改bug,真的佩服。

同样是 localhost 导致的问题,做个补充

需要把emacs放到哪个排除项里啊?我没找到windows defender哪里可以设置排除项?我的emacs在windows下第一次启动,最快也要快20s了。一直找不到原因。