TL; DR膨大な量のパッケージがあるため、起動時間が遅くなります。それが事実であると思わない場合は、読み進めてください。
私のEmacsの起動時間は非常に短いです。を使用せず、ほとんどすべてのコードが遅延するように、use-package
大量のフックとautoload
sを設定するだけです。現実には、それはクレイジーな混乱のように見えますが、全体が通常0.5秒未満で読み込まれます。
しかし、時間が経つにつれて、起動時間が微妙に遅くなり、不可解になっていることに気付きました。最終的には、起動時間が1秒以上になるまでになりました。私はついに十分になり、問題の根本を掘り下げました。私は最終的に私の全体のコメントアウト~/.emacs
ファイルを、その起動時間だったまだ ≥1秒。実際、わずか0.2
数秒で削り取られ、時にはそれ以下になりました。その後、私は試しemacs -q
てみましたが、起動時間は〜0.1
秒でした。
Elispマニュアルのこのセクションを調べてみると、emacs -q
起動時間を大幅に短縮した理由がわかりました。明らかにemacs -q
、起動時にEmacsが3つのことを行うのを停止します。
- 初期化ファイルをロードする
default.el
ファイルをロードする- 呼ぶ
package-initialize
私の全体をコメントアウトして~/.emacs
もほとんど何も起こらないので、すでに初期化ファイルを除外しています。私はdefault.el
ファイルを使用しないので、それも除外されます。これがpackage-initialize
パフォーマンスヒットの原因となっています。
なぜpackage-initialize
そんなに多くのスタートアップ時間を費やしているのでしょうか?それが私が自分に尋ねた最初の質問でした。すべてをオートロードしませんか?はい、そうです。しかし、それはまさに問題です。
「ポスト」パッケージは、自動ロードファイルの読み取りとロードパスの設定で構成されることを説明するこの投稿を見つけました。これは、多くのパッケージを持っている場合、読み込むべきオートロードファイルと設定するパスが多いため、明らかにI / Oペナルティが発生します。残念ながら、これがないと、オートロードを管理するタスクはユーザーの手に落ちます。言い換えれば、package.el
ファイルとパスを自動ロードするためにファイルシステムをクロールさせずに、それを自分で管理する必要があり、それは退屈でエラーが発生しやすいプロセスになる可能性があります。
私はその道を進んで行きたくない。現在116個のパッケージがあり、そのうち107個はELPAからのもので、25個は依存パッケージです。この途方もない数が、私のパフォーマンスをひどく低下させているのだと確信しています。しかし、パッケージを削除したくないので、私は困惑しています。
このような状況で、雷の起動時間を取り戻すための救済策はありますか?
更新:
この問題を解決するために、Stefan Monnierによるいくつかのパッチ(これらのパッチの説明はこちら)について、メーリングリストで新しいスレッドを開始しました。誰でも彼のパッチをテストしてフィードバックを送ることができます。emacs-devel
別の更新:
Stefan Monnierはこの問題にもう関心がないか、私のメッセージを受け取っていないようです。私は前者を信じる傾向がありますが、それは問題ありませんが、そうであれば彼からのある種の反応に感謝します。とにかく、この問題のために彼がこれまでに作成したコードは非常にうまく機能しています。彼の最新のパッチは、ここ(Emacs 25.3用)およびここ(Emacsマスターブランチ用)にあります。彼のパッチのおかげで起動時間に良い改善が見られ、カスタマイズの機能を削除することなく可能な限り最適化されているので、起動時間に満足しています。これらのパッチがいつかEmacsメインラインに組み込まれることを望んでいましたが、私(または他の誰か)は今はStefanの代わりにトーチを取る必要があると思います。メーリングリストには、著作権の割り当てとライセンスに関するスパーが少しありました。最初はそうしなかったが、リチャード・ストールマンや他の人からのコメントのために、著作権の譲渡は当初考えていたほど制限的ではないかもしれない。さらに、著作権の譲渡に代わるものとして、作品をパブリックドメインにコミットすることも可能かもしれません。
いずれにせよ、これまでのパッチについてStefanに感謝します!これらの変更の開発を続けていただければ幸いですが、そうでない場合は大丈夫であり、いつか開発を続けることができます。また、この問題を解決するための洞察と貢献を提供してくれたすべての人に感謝します。
さらに別の更新:
うわー、この機能がついに登場し、Emacs 27に搭載されるようです。StefanMonnierに感謝します!
use-package
これに行く方法です。