dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

rubyのCGIExtでのURLデコード

2012-01-15 22:42:06 | ruby
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