【问题标题】:Why does emacs start slowly为什么emacs启动慢
【发布时间】:2016-03-04 15:41:13
【问题描述】:

最近发现我的emacs启动很慢。有时启动过程需要 30 秒,有时需要 3 秒。我想这与网络环境有关。但是,emacs -q 总是可以快速启动。

【问题讨论】:

  • 您可以尝试ESUP(也可在 MELPA 中使用)来查找配置文件的哪一部分会减慢启动速度。
  • 或者只是手动一分为二你的初始化文件,找到罪魁祸首。
  • 我尝试过使用esup。但是,出现错误,“进程 esup-child 异常退出,代码为 1”。我的 emacs 版本是 24.5.1,没有 GUI。而且,我还发现这个关闭了issue。
  • 这是Emacs takes unbelievably long to start 的副本。您的问题在那里得到解答。

标签: emacs


【解决方案1】:

这个问题就像问“一根绳子有多长”。您没有提供足够的信息。首先告诉我们哪个版本的 emacs 以及您在哪个平台上运行。

你提到 emacs -q 启动很快,所以我们可以假设缓慢是由于你的 init 文件。有很多可能性,如果不分析您的 init 文件,我们无法确定。但是,您可以采取一些措施来帮助确定可能的原因。

@Drew 关于将初始化文件一分为二的评论是一个非常有用的技巧,可以识别初始化文件中的问题根源,尤其是在尝试追踪错误时。当这些贡献者可以链接到特定的配置选项或包加载等时,它可以用于识别加载时间的主要贡献者。当问题是包含太多包的过长低效的 init 文件时,它就不那么有用了。

使用@legoscia 建议的分析器可以帮助确定需要关注的领域,但仍然有必要解释和理解分析器告诉您的内容。

我的建议是

  1. 附加包。自从引入 package.el 和 emacs 包档案以来,我观察到一些用户倾向于有点忘乎所以并安装大量包以防万一。运行 C-h p 并检查您已安装的软件包。如果您不使用任何或您看到不再需要或使用的那些,请将它们删除。每个额外的包(取决于它们的加载方式——见下文)都会增加你的启动时间,因为每个包都需要被加载。加载不需要或不需要的包会减慢启动时间。

  2. 你不需要或不理解的东西。随着时间的推移,我们的 init 文件会随着一些东西而增长,我们不记得为什么要添加它,或者它可能是我们从其他人那里复制的东西,我们认为我们可能需要并忘记了。每隔几个月(取决于您修改 init 的频率 - 如果您进行频繁更改,可能会更频繁,如果您不这样做,则可能会更频繁)检查您的 init 文件并注释掉您不需要、不理解或不知道的任何内容'不记得你为什么添加它。把它注释掉,不要删除它。重新启动重新启动 emacs 并查看它是否启动更快,以及您想要/需要的功能或配置设置是否已经消失。如果有,请查看您已注释掉的内容,看看是否有任何相关的内容。当你找到可能的候选人时,试着弄清楚代码在做什么(查看 emacs 手册,使用 C-h f 和 C-h v 或 C-h m 等来尝试解决它。​​如果它与特定的包有关,请尝试 M-x customize -package 并查看是否有内置的定制可能会给你想要的东西。即使你更喜欢手工定制而不是使用 emacs 的内置定制系统,M-x customize-group 是找出哪些定制的好方法受软件包支持并验证您的变量名称是否正确等。

  3. 了解 emacs 自动加载。 Emacs 有一个非常有用的特性,叫做自动加载。将包加载到 emacs 有两种主要方法。首先是做一个基本的“要求”。这将查找具有适当名称的 emacs 库,并将其读入并评估它(这就像将文件添加到您的 init 文件中,因此要评估更多行,这意味着您的 init 的加载时间增加了)。 require 的好处是它只加载整个文件,并且您知道所有内容都会被评估。坏事是它可能反过来需要其他文件,这可能需要其他文件,并可能导致更长的初始化时间。为了尝试解决这个问题,emacs 具有自动加载功能。基本上,使用自动加载,您告诉 emacs 如果它尝试执行名为“foo”的命令,它必须首先加载(需要)您在自动加载定义中定义的特定文件。这里的好处是,emacs 在您第一次尝试使用它之前不会尝试加载库,因此不会增加加载时间。缺点是它可能意味着您第一次使用命令时会有延迟,并且如果您的 init 的其他部分使用该命令,它将无法工作(好吧,它会工作,但不会影响改善加载时间) .

  4. 切换到使用包装。有一个非常有用的包叫做 use-package 可以帮助解决我提到的所有问题。它有助于划分您的配置,简化一些常见的配置任务,并支持使用自动加载设置包或延迟包的加载,直到 emacs 空闲。如果您正确使用它,它可以大大加快您的初始化时间。强烈建议试一试。见https://github.com/jwiegley/use-package

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2020-04-01
    • 1970-01-01
    • 2017-02-13
    • 2022-01-09
    • 2018-05-09
    相关资源
    最近更新 更多