最終的なパフォーマンス

例によって(?)、Yahoo! JAPANの重量級HTMLのパース&レンダリング対決。


テストマシン

CPU Duron 900MHz(前回PnetiumIII 800MHzと言ったのはウソでした)
メモリ 320MB
OS Gentoo Linux
Ruby 1.8.2

ベンチマークプログラム(Ruby/SALT)- bench_s.rb

s_st = Time.now
require "salt"
s_time = Time.now - s_st

puts "[Library load]"
printf("  SALT = %.6f sec\n", s_time)

#テンプレートの読み込み
t = ""
open("yahoo.html", "r") do |fh|
  t = fh.read
end

s_st = Time.now
s = Salt.new(t)
s_time = Time.now - s_st

puts "[Parse]"
printf("  SALT = %.6f sec\n", s_time)

#結果取得
s_st = Time.now
sr = s.result
s_time = Time.now - s_st

puts "[Result]"
printf("  SALT = %.6f sec\n", s_time)

ベンチマークプログラム(ERB)- bench_e.rb

e_st = Time.now
require "erb"
e_time = Time.now - e_st
puts "[Library load]"
printf("  ERB  = %.6f sec\n", e_time)

#テンプレートの読み込み
t = ""
open("yahoo.html", "r") do |fh|
  t = fh.read
end

e_st = Time.now
e = ERB.new(t)
e_time = Time.now - e_st

puts "[Parse]"
printf("  ERB  = %.6f sec\n", e_time)

#結果取得
e_st = Time.now
er = e.result
e_time = Time.now - e_st

puts "[Result]"
printf("  ERB  = %.6f sec\n", e_time)

実行結果

$ ruby bench_s.rb
[Library load]
  SALT = 0.001828 sec
[Parse]
  SALT = 0.003914 sec
[Result]
  SALT = 0.001931 sec
$ ruby bench_e.rb
[Library load]
  ERB  = 0.011462 sec
[Parse]
  ERB  = 0.087126 sec
[Result]
  ERB  = 0.030482 sec

んー。何度かそれぞれを実行してみたけど、ほとんど同じ結果ですね。

これで思ったのは、「我ながらいいもん作った」というよりERBが死ぬほど遅いという事実。
requireは、FastCGI使うなり、mod_ruby(が使えるならeRuby使うか)を使うなりで逃げるとしても、それ以外でも0.1秒以上かかっているってのが恐ろしい。パースとレンダリングしかしてないのに!

ということで、これからの私のRubyによるプロダクトはこのRuby/SALTを使うことにします。