jetty重复编译jsp页面初探——一个配置提升5ms

        进行测试时,发现jetty一直比jboss慢5ms。通过visualvm观察发现在如下代码处总是出现blocked情况:JspServletWrapper.java:356。通过btrace跟踪得知

在JspServletWrapper.java:356(使用的是glassfish的jsp解析类)行,一直在对应用中的jsp文件default.jsp的编译与解析,每一次都需要进行编译,而编译时必须取得对文件的互斥锁。由此导致响应变慢。

在jetty的webdefault.xml中新增配置如下:

<init-param>
  <param-name>development</param-name>
  <param-value>false</param-value>
</init-param>

由于这个参数默认为true,表示开发模式,每次都会解析jsp文件,修改之后jetty在有jsp页面的场景下应该速度会有所提升。参考文档:http://docs.codehaus.org/display/JETTY/Jsp+Configuration

具体源码参见glassfish版的jsp项目EmbeddedServletOptions.java中如下代码:

89行:privatebooleandevelopment = true;
 
……
 
525行:development = getBoolean(config, development, "development");


及glassfish版JspServletWrapper.java 353行的如下代码:

353行:if(!options.getUsePrecompiled()
 
     && (options.getDevelopment() || firstTime)){
 
     // END S1AS 6181923
 
     synchronized(this) {
 
         firstTime = false;// The following sets reload to true, if necessary
 
        ctxt.compile();
 
     }
 
}


在EmbeddedServletOptions中,使用webdefault.xml中的参数进行了初始化,未有参数设置时默认为true;JspServletWrapper中进行编译前会判断是否为开发模式,由于默认值为true,因此每次都会编译。

而tomcat版的JspServletWrapper.java进行编译jsp页面之前,没有进行development参数的判断,因此不存在开发模式导致每次进行编译的问题,代码如下:

312          if(options.getDevelopment() || firstTime ) {
313         synchronized(this) {
314            firstTime = false;
315
316             // The following sets reload to true, if necessary
317            ctxt.compile();
318        }
319          }


结果为:增加了development为false的配置后,速度提升约5ms,这也就解析了jetty与jboss之间的差距为什么之前一直是5ms!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值