Glide Note

glidenote's blog

`gem install`で入れた`hub`が遅い話

ちゃんとマニュアル読んでれば「何を今さら」という感じなんですが、 hubコマンドについて、ちょっと調べ物をして、README読んでたら

1
Though not recommended, hub can also be installed as a RubyGem:

というのが目に入った。

理由のWhy to not use hub with RubyGemsをみると RubyGems経由でインストールしたhubは遅いから使うべきじゃ無いとベンチマーク結果とともに書いてある。

実際に手元のMacで比較

1
2
3
4
5
6
7
# No RubyGems
time (for i in {1..10}
do
  /usr/local/bin/hub --version > /dev/null
done)

( for i in {1..10}; do; /usr/local/bin/hub --version > /dev/null; done; )  0.55s user 0.22s system 83% cpu 0.925 total
1
2
3
4
5
6
7
# With RubyGems
time (for i in {1..10}
do
  ~/.rbenv/versions/1.9.3-p194/bin/hub --version > /dev/null
done)

( for i in {1..10}; do; ~/.rbenv/versions/1.9.3-p194/bin/hub --version > ; ; )  4.02s user 0.60s system 87% cpu 5.282 total

え、こんなに遅いの…

改善方法(というかちゃんとしたインストール方法)

公式に書いてあるようにmacならhomebrewで

1
brew install hub

Linuxなら

1
curl http://hub.github.com/standalone -sLo ~/bin/hub && chmod +x ~/bin/hub

で入れる。

RubyGems経由で導入した場合も、下記のようにstandalone形式で入れると早いとのこと。

1
2
gem install hub
hub hub standalone > ~/bin/hub && chmod +x ~/bin/hub

実際に測定してみた。

1
2
3
4
5
6
7
# Standalone via RubyGems
time (for i in {1..10}
do
 ~/bin/hub --version > /dev/null
done)

( for i in {1..10}; do; ~/bin/hub --version > /dev/null; done; )  0.56s user 0.22s system 84% cpu 0.928 total

確かに早い。

でもwhich hubとかすると、自分の環境ではgemで入れたhubが呼ばれてたので、 Macならhomebrew、Linuxはcurlで入れるとかが統一しておいて、gem install hubしないほうが良さそう。

2年近くhub使ってて初めて知った…

余談ですがzshのプロンプトにgitのブランチ名とか出してる場合、毎回hubが呼び出されている可能性があるので下記を忘れずに。

gitとhubを比べてみると結構速度に差があるな-

1
2
3
4
5
time /usr/local/bin/hub --version > /dev/null
/usr/local/bin/hub --version > /dev/null  0.06s user 0.02s system 83% cpu 0.093 total

time /usr/bin/git --version > /dev/null
/usr/bin/git --version > /dev/null  0.00s user 0.00s system 71% cpu 0.003 total

Comments