Mercurial をちょっとだけ速くしてみた - Mercurial Advent Calendar 2011

2011 年 12 月 14 日 はてなブックマークへ追加 はてなブックマーク - Mercurial をちょっとだけ速くしてみた - Mercurial Advent Calendar 2011 Bookmark this on Delicious

Mercurial ユーザーの皆様こんばんは。 Mercurial Advent Calendar 2011 の 14 日目をお送りします。

突然ですが、 hg コマンド、遅くないですか? Enter キーを押した後の一瞬の間が妙に引っかかりますよね?

Git と比較してみるとオーダーが 1 桁違います。遅いです。(... というか Git 速すぎ。)

% time hg stat
hg stat  0.16s user 0.02s system 96% cpu 0.190 total

% time git status
# On branch master
nothing to commit (working directory clean)
git status  0.02s user 0.01s system 48% cpu 0.067 total

何か癪なので、少し速い chg コマンドを作ってみました。

% time chg stat
chg stat  0.00s user 0.00s system 0% cpu 0.063 total

... 残念ながら Windows では動きません。ごめんなさい ...

http://bitbucket.org/yuja/chg/

chgC で書いた hg のラッパーです。 仕掛けは単純で、 Mercurial 1.9 で実装された コマンドサーバー をバックグラウンドで常駐させ、フロントエンドの chg はコマンド要求を発行し、その応答を垂れ流しているだけです。 フロントエンドは引数の解釈すらしていません。何という手抜きでしょう。

hg コマンド開始後の約 100msec は、ほとんど Python コードのロードに費やされているんですね。

[2011-12-18 追記] Gettext メッセージのロードも? 時間がかかるようです。 LANG=CLANG=ja_JP.utf-8 で 30msec 程度差がありました。

標準のコマンドサーバーにはパイプで通信する機能しかないので、 chg では(適当に実装した)ソケット通信用のエクステンションを使っています。 コマンドサーバーは比較的新しい機能ですが、まだまだいろいろな可能性がありそうですね。

Advent Calendar 明日は @flyingfoozy さんです。期待してます。

コメント

blog comments powered by Disqus