brew更新的 emacs 29.1 老 mac 巨慢,真的要换 M 系 MAC 了?

八月初更新的,折腾了几天了,tree-sit 也配制上了,在 go-mode,也正确转换为 go-ts-mode 了,lsp-mode 也关了,只用 eglot 了,代码写两行就把 CPU 吃到 50、80、100,我把 doomline 都关了,只用 powerline 了,flymake 也关了,用 flycheck. 是真的对 intel 最后一款 macbook 不友好了么? 风扇呼呼的响。。。

我用的 2019年的 Macbook Pro,用 Emacs 29.1 挺快的。你可能是开了 native-comp 吧?后台在编译 eln。

你可以试试在 early-init.el 中设置:

(setq native-comp-jit-compilation nil)

这样第三方包就不会用 native-compilation了。我现在是直接自己编译 Emacs 30, 关闭 native-comp 功能.

我手头是2020年的iMac,用Emacs30.05 非常快。

我发现我在使用 mac trackpad 或者鼠标时,滚动查看代码。CPU 就会飙升到 50 以上,如果文件越大,还会持续升到 90 以上,我查看了 minor mode,把能关的都关了,用 profiler-report 查了一下,也只发现 vertico 只吃了 40% 左右,auto GC 20%左右,28 版本没这问题了。。 大佬们还有什么问题定位的方法,我用的是 brew 版本,非自行编译的。现在写代码有点痛苦,又不想用 vscode

brew有很多版本,你要说清楚具体是什么命令安装的。

还有你用的配置? emacs -q 启动也这样?

emacs-version

GNU Emacs 29.1 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60 Version 10.14.6 (Build 18G9323)) of 2023-07-30

brew info emacs

❯ brew info emacs
Warning: Treating emacs as a formula. For the cask, use homebrew/cask/emacs
==> emacs: stable 29.1 (bottled), HEAD
GNU Emacs text editor
https://www.gnu.org/software/emacs/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/emacs.rb
License: GPL-3.0-or-later
==> Dependencies
Build: pkg-config ✔
Required: gnutls ✔, jansson ✔, tree-sitter ✔
==> Options
--HEAD
	Install HEAD version
==> Caveats
To start emacs now and restart at login:
  brew services start emacs
Or, if you don't want/need a background service you can just run:
  /usr/local/opt/emacs/bin/emacs --fg-daemon
==> Analytics
install: 13,163 (30 days), 24,078 (90 days), 34,307 (365 days)
install-on-request: 8,739 (30 days), 15,943 (90 days), 23,207 (365 days)
build-error: 2 (30 days)

emacs --version

GNU Emacs 29.1
Copyright (C) 2023 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

emacs -q 只开启了go-mode go-t 和 eglot C-h m 看到的 minor modes

Minor modes enabled in this buffer: Auto-Save Eglot--Managed
Eglot-Inlay-Hints Eldoc Flymake Font-Lock

然后就很慢了,对了,我还重新安装了一次 emacs

brew reinstall --cask emacs

还是很慢,感觉最后的出路是重装系统了

也有可能是和go-mode的 lsp-sever 有关。把 Eglot 的 inlay-hint 和 auto-save 关了再试试。你要缩小范围才能定位是哪个包引起的问题。

我说的 Emacs -q,意思是不加载任何第三方包,看看能否重现问题。

不然你重装系统也不一定能解决。

用 profiler-start 开启后,随便找个代码上下滚,滚个 5 秒,就 CPU 90%+了, 然后把 report 拿了出来。但水平有限,正在一个个去查,有大佬一眼看出问题的,可以提个醒。

         843  89% - command-execute
         843  89%  - call-interactively
         807  85%   - byte-code
         807  85%    - read-extended-command
         807  85%     - read-extended-command-1
         807  85%      - completing-read
         807  85%       - completing-read-default
         807  85%        - apply
         807  85%         - vertico--advice
         807  85%          - progn
         807  85%           - let
         807  85%            - unwind-protect
         807  85%             - progn
         807  85%              - apply
         807  85%               - #<compiled -0x5b750694cbbc667>
         418  44%                - read-from-minibuffer
         274  29%                 - vertico--exhibit
         274  29%                  - let
         187  19%                   - vertico--display-candidates
         187  19%                    - vertico--arrange-candidates
         187  19%                     - progn
         172  18%                      - if
         172  18%                       - let*
         171  18%                        - unwind-protect
         171  18%                         - progn
         171  18%                          - cons
         171  18%                           - apply
         171  18%                            - completion-all-completions
         171  18%                             - completion--nth-completion
         171  18%                              - completion--some
         171  18%                               - #<compiled 0x1368548ae63831f3>
         171  18%                                - orderless-all-completions
         171  18%                                 - orderless-filter
         171  18%                                  - all-completions
         171  18%                                   - #<compiled 0xc780cb72ddd4527>
         171  18%                                    - complete-with-action
          14   1%                                     - all-completions
           8   0%                                      - #<compiled 0x5fb9188a69e4e59>
           5   0%                                         #<compiled -0x86b1d81429b969c>
           1   0%                        + if
          13   1%                      + vertico--recompute
           2   0%                      + progn
          87   9%                   + vertico--update
          76   8%                 + minibuffer-setup
           3   0%                 + timer-event-handler
          36   3%   + funcall-interactively
          72   7% + ...
          15   1% + timer-event-handler
           5   0% + redisplay_internal (C function)
           4   0% + jit-lock--antiblink-post-command
           2   0% + winner-save-old-configurations

我是用 emacs -q 启动的,想着只加必要的,mode 有个代码着色,我就一边撸代码,一边看看情况,没想到,。。。

这个report看不出来问题,85%的CPU时间都在M-x里面

emacs -q 启动后。C-h m

Minor modes enabled in this buffer: Eldoc Font-Lock

The major mode is ELisp/l mode defined in elisp-mode.el:

Major mode for editing Lisp code to run in Emacs.
Commands:
Delete converts tabs to spaces as it moves back.
Blank lines separate paragraphs.  Semicolons start comments.

When editing Lisp data (as opposed to code), ‘lisp-data-mode’ can
be used instead.

就打开 init.el 上下滚动后的 profiler-report

        1547  91% - command-execute
        1546  91%  - call-interactively
        1262  74%   - funcall-interactively
        1254  74%    - mwheel-scroll
           2   0%     - error-message-string
           1   0%      - substitute-command-keys
           1   0%         generate-new-buffer
           7   0%    + execute-extended-command
         284  16%   - byte-code
         284  16%    - read-extended-command
         284  16%     - read-extended-command-1
         284  16%      - completing-read
         284  16%       - completing-read-default
          19   1%          read-from-minibuffer
         107   6% + ...
          25   1% + redisplay_internal (C function)
           4   0% + timer-event-handler
           2   0% + jit-lock--antiblink-post-command

inlay-hints 的嫌疑很大

看看,emacs -q ,啥都不开了,就滚动。3、4 秒就能滚成 90%+,

滚动的时候占用高不是问题 (本来就要用CPU重画屏幕),不卡就行

硬要说有啥变了的话,可能是 double buffering 相关处理有所变化。可以改用 emacs-mac 试试

(brew:

使用正常,一点都不慢

恭喜你下载的是正版Emacs。

Emacs -Q然后M-x find-library org打开org.el源码,M-x fundamental-mode滚动时CPU在80~90%说明是正常水平。其它编辑器一般在10~20%之间。

试试emacs-mac GitHub - railwaycat/homebrew-emacsmacport: Emacs mac port formulae for the Homebrew package manager

1 个赞

谢谢各位大佬参与,已经试过很多方法,现在系统都升级到了 sonoma public beta3,也没有解决这个问题,大至问题定位在 emacs 重绘相当吃 cpu ,任何代码 (rust/golang/elisp) 写一段时间,都会在 75%起跳,推荐 emacs-mac 的我也去试了,下载下来是 28.2。我以前用 28.2 非常流畅(非常是重点)。 现在用一个曲线救国的方法,在

terminal 里使用 emacs

,又丝滑了。。。哈哈哈哈。 谢谢,各位大佬,排除了其它问题,总还是找条出路了。

2 个赞