1
0

More than 1 year has passed since last update.

benchmark_driver 0.16.0 でワンライナー可能に

Last updated at Posted at 2022-11-06

Ruby のベンチマークテストツール benchmark_driver のバージョンが 0.16.0 に上がった。

新機能の一つは,ワンライナーでの実行(「インライン Ruby スクリプトのベンチマーキング」)。

短いスクリプトならいちいちファイルを作らなくてもベンチマークテストができる。

ではこれを使って,CGI.escapeHTML による HTML エスケープを以下の Ruby バージョンで比較してみよう。

  • Ruby 3.1.2
  • Ruby 3.2.0-preview2
  • Ruby 3.2.0-preview2(YJIT)

rbenv で Ruby をインストールしている場合は,--rbenv オプションによって複数の Ruby での比較ができる。オプションの値は以下のように書く。

3.1.2;3.2.0-preview2;3.2.0-preview2 --yjit

つまり,複数の Ruby バージョンを ; で区切る。YJIT を使う場合はスペースを挟んで --yjit を付ける。

実行するスクリプトは

require'cgi';CGI.escapeHTML('F&B<GB>B')

だ。

全体としては以下のように書く。スクリプトも --rbenv の値も " " で囲む。

benchmark-driver "require'cgi';CGI.escapeHTML('F&B<GB>B')" --rbenv "3.1.2;3.2.0-preview2;3.2.0-preview2 --yjit"

結果は以下のとおり。

require'cgi';CGI.escapeHTML('F&B<GB>B')
     3.2.0-preview2 --yjit:   1466638.7 i/s 
            3.2.0-preview2:   1098110.5 i/s - 1.34x  slower
                     3.1.2:     46608.3 i/s - 31.47x  slower

えっ,ちょっ,ナニコレ? Ruby 3.2 速過ぎないか? マジかよ,何があった?

年末にリリースされるであろう Ruby 3.2.0 正式版が preview2 の速度を維持するかどうかは分からないが,ともかく Ruby 3.1.2 → 3.2.0-preview2 で 20 倍速以上になっている。
YJIT を使うとさらに 30% 以上も速くなっている。
ええ〜っ?

いや,まあ,他にいくつか試したコードでは Ruby 3.2.0 は全然速くなってないので,CGI.escapeHTML が特殊なケースなのだろうと思う。
うーん,それにしても CGI.escapeHTML はこれまでも 高速化を繰り返してきた のに,まだ大幅な高速化の余地があったのかね。
これが何か私の勘違いとかではなく正夢であることを祈る。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0