JRubyのspinup時間はどこまで速くできるのかやってみた
rubygems, rack, rails, sinatra等を使わないとどこまで速くなるのかやってみた。
使ったのは最新のJRuby1.5.0のnightlyビルドと以下のサーブレット。
package org.bongole; import java.io.IOException; import java.util.ArrayList; import java.util.logging.Logger; import javax.servlet.http.*; import org.jruby.Ruby; import org.jruby.RubyInstanceConfig; import org.jruby.exceptions.RaiseException; import org.jruby.javasupport.JavaEmbedUtils; import org.jruby.runtime.builtin.IRubyObject; import org.jruby.util.ClassCache; @SuppressWarnings("serial") public class SimpleJRubyServlet extends HttpServlet { private ClassCache classCache = JavaEmbedUtils.createClassCache(Thread.currentThread().getContextClassLoader()); private Logger logger = Logger.getLogger(this.getClass().getName()); public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { Ruby runtime = JavaEmbedUtils.initialize(new ArrayList(), createRuntimeConfig()); runtime.getGlobalVariables().set("$resp", JavaEmbedUtils.javaToRuby(runtime, resp)); runtime.evalScriptlet("$resp.content_type = 'text/plain'; $resp.writer.println('Hello, World from JRuby')"); } private RubyInstanceConfig createRuntimeConfig() { RubyInstanceConfig config = new RubyInstanceConfig(); config.setClassCache(classCache); return config; } }
ここまでシンプルにしても、現状5,6秒くらいはかかるってことか。。。
id:urekatさんの実験によるとsinatraとrackで8,9秒ってところだからがんばってもあと3秒くらいしか縮まないのか。なるほど。