如何改善 company-posframe / company-box 反应慢的问题?

以下是我用 Emacs profiler 的到的结果。

https://gist.github.com/stardiviner/0738ffcf9f179a8e6d4e824000698805

https://gist.github.com/stardiviner/0070861b9937f1f1c5ab55a45ab7e4b3

我在里面看到了主要的几个, golden-ratio, aggressive-indent, doom-modeline 等。我关闭这些 mode 之后,速度明显快了。不知道是我这些mode配置有问题还是mode本身确实比较慢。 另外看profiler结果, company-mode 的调用层次也非常深,不知道这个是不是原因之一。(你们的company-mode调用层次又这么多么?想知道我这个是不是正常的。)

除了关掉这些mode,不知道大家有没有改善的方法? 这里是我上面提到的几个mode的配置: https://gist.github.com/stardiviner/0bc08a8521a94bfab6dd2c3e8d13147f

我的经验,主要是`aggressive-indent`和 highlight-indent-guides,尤其是大文件,关闭它性能就好很多。golden-ratio没使用不清楚,doom-modeline影响不会太大。

确实在用company-box的时候会比company-quickhelp卡一点,如果你不在意外观的话,可以尝试一下company-quickhelp

在用 company-box 之前确实是用 company-quickhelp 的,但是由于company-mode本身的tooltip实现会出现不对齐,字体等等问题。没有解决办法。于是才转向 company-box, company-posframe 之类使用 posframe 的插件。但是使用后增加了一点性能负担。有的时候我甚至关掉 company-quickhelp 或者 company-box-doc 的 delay 自动打开。而是使用手动打开的方式。这样也是一个缓解的办法。

是的,关掉 这些个mode之后性能会好很多。可能不止大文件,我通常是打开七八十个Org 文件,以及一些其他代码文件。(用desktop来作为session备份恢复)文件打开太多可能也影响了性能。

@seagle0128 我好奇一点,为啥 doom-modeline总是运行的?默认的mode-line设置好像不是总是需要更新运行。不知道这个是在我当前frame更新的缘故还是在 company-box , company-posframe 之类里面更新的缘故? doom-modelineposframe 是关掉的么?

这个要问下posframe了,应该是关闭才对。可以看看还有没有优化的地方。 目前doom-modeline只会频繁更新当前buffer状态,比如修改、删除、只读等等。其他部分都只会在变化时作更新。

BTW,我不用desktop,感觉效率很低。现在用persp-mode,加上一些自己的代码,完美使用。

desktop restore确实很慢,导致Emacs启动很慢。我去参考下你的 persp-mode 配置尝试下。谢谢。:)

看了下 posframe 的代码,应该是禁用了 mode-line 的。

(unless respect-mode-line
        (setq-local mode-line-format nil))

那就是正常的刷新了,mode-line本身就会不停刷新的,CPU占用不会很高

@seagle0128 关于刷新的问题,我有个好奇的地方。 不知道是不是由于 redisplay 的缘故,很多地方 doom-modeline 都是在深层次中被调用的。

比如这里: CPU

- flyspell-post-command-hook                                                                                                           4180  19%
 - flyspell-check-word-p                                                                                                               4076  18%
  - sit-for                                                                                                                            4075  18%
   - redisplay                                                                                                                         3697  16%
    - redisplay_internal (C function)                                                                                                   450   2%
     - eval                                                                                                                             251   1%
      + doom-modeline-format--message                                                                                                    85   0%
      + doom-modeline-format--main                                                                                                       68   0%
      + doom-modeline-format--vcs                                                                                                        36   0%
      + doom-modeline-segment--buffer-position                                                                                           12   0%
      + doom-modeline-segment--major-mode                                                                                                 7   0%
      + doom-modeline-segment--buffer-info                                                                                                7   0%
      + doom-modeline-segment--buffer-info-simple                                                                                         6   0%
      + doom-modeline-segment--buffer-encoding                                                                                            6   0%
      + doom-modeline-segment--workspace-name                                                                                             6   0%
      + doom-modeline-segment--matches                                                                                                    1   0%
        doom-modeline-segment--process                                                                                                    1   0%
      + doom-modeline-segment--remote-host                                                                                                1   0%
        doom-modeline-segment--modals                                                                                                     1   0%
     + jit-lock-function                                                                                                                101   0%
     + golden-ratio                                                                                                                      53   0%
     + eaf-monitor-configuration-change                                                                                                  22   0%
     + doom-modeline-refresh-bars                                                                                                        15   0%
     + #<compiled 0x632e407f6038500>                                                                                                      2   0%
     + mode-line-default-help-echo                                                                                                        2   0%
     + window--adjust-process-windows                                                                                                     1   0%
     + eaf-monitor-window-size-change                                                                                                     1   0%
   + read-event                                                                                                                         243   1%
 + flyspell-word                                                                                                                         97   0%
.....
......
- redisplay_internal (C function)                                                                                                      1297   5%
 - eval                                                                                                                                 558   2%
  + doom-modeline-format--main                                                                                                          347   1%
  + doom-modeline-format--vcs                                                                                                            34   0%
  + doom-modeline-segment--buffer-position                                                                                               30   0%
  + doom-modeline-segment--workspace-name                                                                                                28   0%
  + doom-modeline-format--message                                                                                                        24   0%
  + doom-modeline-segment--buffer-info                                                                                                   22   0%
  + doom-modeline-segment--major-mode                                                                                                    18   0%
  + doom-modeline-segment--matches                                                                                                       10   0%
  + doom-modeline-segment--buffer-encoding                                                                                                5   0%
  + doom-modeline-segment--remote-host                                                                                                    4   0%
  + doom-modeline-segment--modals                                                                                                         2   0%
    doom-modeline-segment--vcs                                                                                                            1   0%
  + doom-modeline-segment--buffer-info-simple                                                                                             1   0%
    doom-modeline-segment--bar                                                                                                            1   0%
 + golden-ratio                                                                                                                         464   2%
 + jit-lock-function                                                                                                                    104   0%
 + eaf-monitor-configuration-change                                                                                                      56   0%
 + #<compiled 0x632e407f6038500>                                                                                                         41   0%
 + doom-modeline-refresh-bars                                                                                                            26   0%
 + company-posframe-window-change                                                                                                        15   0%
 + mode-line-default-help-echo                                                                                                            9   0%
 + window--adjust-process-windows                                                                                                         5   0%
 + which-key--hide-popup-on-frame-size-change                                                                                             4   0%
 + git-gutter+-show-gutter                                                                                                                3   0%
 + eaf-monitor-window-size-change                                                                                                         3   0%
 + desktop-auto-save-set-timer                                                                                                            1   0%
 + window--resize-root-window-vertically                                                                                                  1   0%

Memory

- redisplay_internal (C function)                                                                                       31,412,027,697  41%
 - golden-ratio                                                                                                         30,175,102,280  39%
  - golden-ratio--resize-window                                                                                         18,209,449,900  24%
   - enlarge-window                                                                                                     18,209,426,668  24%
    + window-resize                                                                                                     18,209,422,420  24%
    + window--resizable-p                                                                                                        1,056   0%
   + #<compiled 0xb96856203c4fe>                                                                                                 5,280   0%
   + window-resizable-p                                                                                                          5,280   0%
  + balance-windows                                                                                                     11,953,913,278  15%
  + run-hooks                                                                                                                6,276,155   0%
  + recenter                                                                                                                 2,071,091   0%
  + golden-ratio--dimensions                                                                                                   411,736   0%
 - git-gutter+-show-gutter                                                                                               1,167,682,835   1%
    git-gutter+-set-window-margin                                                                                        1,167,682,835   1%
 - eval                                                                                                                     38,550,116   0%
  + doom-modeline-format--main                                                                                              11,276,312   0%
  + doom-modeline-segment--workspace-name                                                                                    6,410,664   0%
    doom-modeline-segment--buffer-encoding                                                                                   2,755,388   0%
  + doom-modeline-segment--buffer-info                                                                                       2,667,246   0%
  + doom-modeline-segment--major-mode                                                                                        2,030,696   0%
  + doom-modeline-segment--buffer-position                                                                                   1,937,504   0%
  + doom-modeline-segment--matches                                                                                           1,556,430   0%
  + doom-modeline-format--vcs                                                                                                1,220,892   0%
  + doom-modeline-segment--remote-host                                                                                         847,294   0%
  + doom-modeline-format--message                                                                                              672,564   0%
  + doom-modeline-segment--vcs                                                                                                 296,584   0%
    doom-modeline-segment--modals                                                                                              173,616   0%
    doom-modeline-segment--debug                                                                                               120,504   0%
    doom-modeline-segment--checker                                                                                             119,768   0%
  + doom-modeline-segment--buffer-info-simple                                                                                  115,384   0%
    doom-modeline-segment--input-method                                                                                         96,096   0%
  + doom-modeline-segment--process                                                                                              48,992   0%
  + doom-modeline-format--org-src                                                                                               29,308   0%
  + let*                                                                                                                        14,584   0%
    doom-modeline-segment--selection-info                                                                                       13,471   0%
    if                                                                                                                          12,312   0%
 + jit-lock-function                                                                                                        18,404,413   0%
 + eaf-monitor-configuration-change                                                                                          6,873,173   0%
 - doom-modeline-refresh-bars                                                                                                2,461,756   0%
  - doom-modeline--make-xpm                                                                                                  1,202,148   0%
     apply                                                                                                                     183,192   0%
   - create-image                                                                                                               96,136   0%
    - apply                                                                                                                     70,792   0%
       #<compiled 0x64351dd117934ba>                                                                                            29,608   0%
    - create-image-with-background-color                                                                                        25,344   0%
     + let*                                                                                                                     25,344   0%
    doom-modeline--font-height                                                                                                       8   0%
 + company-posframe-window-change                                                                                            1,508,536   0%

这里面是一个什么关系呢?

就是自动刷新mode-line啊,你想问什么呢?

这个就是刷新导致的么?ok,懂了。哈哈,谢谢啊