From: MoonWolf Date: 2002-08-28T22:00:15+09:00 Subject: [ruby-list:35809] Re: multipart な CGI を速くしたい MoonWolfです。 > なんとかもう少し速くならないものかと思って調べていたところ、 > ruby-1.6.7-20020801-i586-mswin32の中のcgi.rbではStringIOを使うように > なっているのに気が付きました。ところが肝心の stringio.so が同梱されて > いません(ruby 1.7 には入っていますが)。 C言語版にこだわらなければ、PureRuby版のStringIOでもいいと思います。 http://www.moonwolf.com/ruby/archive/stringio01.zip > multipartなFORM(fileが1個、textが40個,selectが30個,checkboxが100個)で > アップロードの処理時間を計るとAthlon XP 2100+ で約6秒、遅いマシンでは > もっとかかります(fileは空白のまま、cgi.rbの中のread_multipartの時間を > 計測、CONTENT_LENGTHは約20KB)。 この程度のFORMで遅くなるのはcgi.rbにも原因があります。 read_multipart中の以下の部分は無駄が多いです。 > begin > require "stringio" if not defined? StringIO > body = StringIO.new > rescue LoadError > require "tempfile" > body = Tempfile.new("CGI") > end メソッド実行時ではなく、ライブラリロード時に解決すべき問題です。 以下の様にするだけでもだいぶ違うと思います。 class CGI begin require "stringio" def new_body StringIO.new end rescue LoadError require "tempfile" def new_body Tempfile.new("CGI") end end end -- MoonWolf