最終的なパフォーマンス
例によって(?)、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秒以上かかっているってのが恐ろしい。パースとレンダリングしかしてないのに!