Speeding up the creation of new sessions
Posted 22 Nov 2005
There's a tiny peculiarity in the cgi/session.rb, which slows down the creation of new sessions quite a bit. The library digest/md5 gets required on creation of new sessions in method create_new_id. This can be rather expensive to execute. Move the require line to the beginning of the file, and your session creation will run faster. In environments where require is really slow, it can make a big difference (almost 3 times faster), as you can see from this data:perf data file 1: 11-22.new.md5_unfixed requests=1000, options=-bm=new_sessions perf data file 2: 11-22.new.md5_fixed requests=1000, options=-bm=new_sessions page c1 real c2 real r/s r/s ms/r ms/r c1/c2 /empty/index 7.07800 2.39067 141.3 418.3 7.08 2.39 2.96 /welcome/index 7.07800 2.65100 141.3 377.2 7.08 2.65 2.67On my Linux machine, the difference is less pronounced, but still significant:
page c1 real c2 real r/s r/s ms/r ms/r c1/c2 /empty/index 1.47967 1.25513 675.8 796.7 1.48 1.26 1.18 /welcome/index 1.63819 1.41946 610.4 704.5 1.64 1.42 1.15Maybe the require was placed inside function create_new_id to avoid loading the digest/md5 package in CGI environments when the request already passes a session id. But since Rails will usually run under FCGI/SCGI, moving it surely doesn't hurt! If you also have Ruby CGI apps running on the same machine, you can copy the file into your load path for Rails and modify this copy instead.