rubyでWebサーバのアクセスログを分析するのに、CGI.parse でリクエストパラメータをデコードするプログラムを書きましたが、CGI.parse は分析自体のプログラムよりも CGI.parse に時間がかかっていました。
そこで、「ruby CGI 遅い」で検索してみたところ、CGIExt が見つかったので、こちらを利用してみたところ、パラメータのデコードにかかる時間が大幅に短縮されました。
require 'cgi' の後に require 'cgiext' とするだけでよいのもプログラムの修正が少なくて便利です。
http://cgiext.rubyforge.org/
■CGIを利用した場合
●プログラム
#!/usr/local/bin/ruby
require 'cgi'
require 'time'
# HIRAGANA=にほん&KATAKANA=ニホン&KANJI=日本
paramstr = 'HIRAGANA=%e3%81%ab%e3%81%bb%e3%82%93&KATAKANA=%e3%83%8b%e3%83%9b%e3\
%83%b3&KANJI=%e6%97%a5%e6%9c%ac'
start_time = Time.now
1.upto(10000) do |i|
CGI.parse(paramstr)
end
end_time = Time.now
print("time: #{end_time - start_time}\n")
●実行結果
time: 0.466363
■CGIExtを利用した場合
●プログラム
#!/usr/local/bin/ruby
require 'cgi'
require 'cgiext'
require 'time'
# HIRAGANA=にほん&KATAKANA=ニホン&KANJI=日本
paramstr = 'HIRAGANA=%e3%81%ab%e3%81%bb%e3%82%93&KATAKANA=%e3%83%8b%e3%83%9b%e3\
%83%b3&KANJI=%e6%97%a5%e6%9c%ac'
start_time = Time.now
1.upto(10000) do |i|
CGI.parse(paramstr)
end
end_time = Time.now
print("time: #{end_time - start_time}\n")
●実行結果
time: 0.070527
そこで、「ruby CGI 遅い」で検索してみたところ、CGIExt が見つかったので、こちらを利用してみたところ、パラメータのデコードにかかる時間が大幅に短縮されました。
require 'cgi' の後に require 'cgiext' とするだけでよいのもプログラムの修正が少なくて便利です。
http://cgiext.rubyforge.org/
■CGIを利用した場合
●プログラム
#!/usr/local/bin/ruby
require 'cgi'
require 'time'
# HIRAGANA=にほん&KATAKANA=ニホン&KANJI=日本
paramstr = 'HIRAGANA=%e3%81%ab%e3%81%bb%e3%82%93&KATAKANA=%e3%83%8b%e3%83%9b%e3\
%83%b3&KANJI=%e6%97%a5%e6%9c%ac'
start_time = Time.now
1.upto(10000) do |i|
CGI.parse(paramstr)
end
end_time = Time.now
print("time: #{end_time - start_time}\n")
●実行結果
time: 0.466363
■CGIExtを利用した場合
●プログラム
#!/usr/local/bin/ruby
require 'cgi'
require 'cgiext'
require 'time'
# HIRAGANA=にほん&KATAKANA=ニホン&KANJI=日本
paramstr = 'HIRAGANA=%e3%81%ab%e3%81%bb%e3%82%93&KATAKANA=%e3%83%8b%e3%83%9b%e3\
%83%b3&KANJI=%e6%97%a5%e6%9c%ac'
start_time = Time.now
1.upto(10000) do |i|
CGI.parse(paramstr)
end
end_time = Time.now
print("time: #{end_time - start_time}\n")
●実行結果
time: 0.070527