chrubyプラグインを削除し、chrubyを.zshrc
に手動で追加すると、ターミナルの起動時間が500ミリ秒短縮されました。
OS X10.9.5マシンで再現できます。
+ 1455372625.828910 /Users/janke/.oh-my-zsh/oh-my-zsh.sh:81> plugin=chruby
+ 1455372625.828954 /Users/janke/.oh-my-zsh/oh-my-zsh.sh:82> [ -f /Users/janke/.oh-my-zsh-custom/plugins/chruby/chruby.plugin.zsh ']'
+ 1455372625.829008 /Users/janke/.oh-my-zsh/oh-my-zsh.sh:84> [ -f /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh ']'
+ 1455372625.829074 /Users/janke/.oh-my-zsh/oh-my-zsh.sh:85> source /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh
+ 1455372625.829375 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:17> alias 'rubies=chruby'
+ 1455372625.829660 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:36> _ruby-build_installed
+ 1455372625.829715 _ruby-build_installed:1> whence ruby-build
+ 1455372625.830336 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:66> _homebrew-installed
+ 1455372625.830387 _homebrew-installed:1> whence brew
+ 1455372625.830445 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:66> _chruby-from-homebrew-installed
+ 1455372625.831099 _chruby-from-homebrew-installed:1> brew --prefix chruby
+ 1455372626.053828 _chruby-from-homebrew-installed:1> [ -r /usr/local/opt/chruby ']'
+ 1455372626.054501 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:67> brew --prefix chruby
+ 1455372626.269022 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:67> source /usr/local/opt/chruby/share/chruby/chruby.sh
...
+ 1455372626.271227 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:68> brew --prefix chruby
+ 1455372626.494185 /Users/janke/.oh-my-zsh/plugins/chruby/chruby.plugin.zsh:68> source /usr/local/opt/chruby/share/chruby/auto.sh
その時間のほとんどはbrew --prefix chruby
の呼び出しに費やされており、そのうち最大3回の呼び出しを行っています。 brew
コマンドはrubyプログラムであり、高速ではありません。 起動時に繰り返し呼び出すものではありません。 少なくとも、 chruby
プラグインはbrew --prefix chruby
を1回呼び出し、冗長な呼び出しを避けるために結果を変数にキャッシュする必要があります。 さらに良いことに、プレーンなbrew --prefix
の使用に切り替えて、 $(brew --prefix)/opt/chruby
を使用してzshでchrubyへのパスを作成します。 プレーンなbrew --prefix
呼び出しは最適化されており、高速システムでは約15ミリ秒しかかかりません。
将来の参考のために、パフォーマンスの問題を診断するために、このようなプロファイリングを自分で行うことができます。
あなたの最初にこれを貼り付けてください~/.zshrc
。
# Debugging prompt with timestamp for profiling
PS4=$'+ %D{%s.%6.} %N:%i> '
次に、 zsh -lx 2>zsh-startup.log
を実行し、開いた結果のシェルの最初のコマンドとしてexit
を実行します。 起動シーケンスのタイムスタンプ付きのトレースが表示されます。 これは、どの部分に非常に時間がかかっているかを知るのに役立ちます。 スプレッドシートに貼り付けて、後続の行のタイムスタンプを比較し、実行時間を取得して簡単にすることができます。 または、パスワードやトークンをスクラブして、分析の手助けが必要な場合は要点として投稿してください。
私はこの修正に満足しているので、@ T0mK0に感謝します!
最も参考になるコメント
私はこの修正に満足しているので、@ T0mK0に感謝します!