一、啰嗦

  做web开发的都知道,性能的重要性就不必强调了。就前端展示的工作来说,jsp大家都熟悉html更熟悉;web服务器tomcat应该是最熟悉的了;web方面的基础知识上来说,静态页面比动态页面效率要高(什么是动态页面什么是静态页面不说了),在项目初期或者孵化阶段,人手少,工期短,资金更少,不可能按照高性能的架构一步到位,那么怎么在有效的资源上做出牛逼的东西呢——优化

  jsp页面中可以写java代码、el表达式、jstl标签等。对于jsp里面的静态标签(html的标签等)应该效率是最高的,其次应该是java了,因为jsp会被编译为java代码(理论,没有测试),在接下来就是el和jstl了。

二、问题

今天遇到的一个问题是:

  一些配置信息,可以从后台全局性的传到jsp页面中,然后进行资源的读取;也可以在页面中使用java代码读取这些静态的配置,然后在模板里面使用jstl设置变量,再做访问。

这两种方式个人认为前者的效率会更高,可能自己知识面太窄,没有充足的理论依据。

三、验证

带着问题,首先希望是在网上巴拉了一大圈,没找到相关的文章;又搜了一些tomcat解析原理,没找到有用的,直接DEMO试一下。

机器:个人pc(12g+256ssd+i5)

服务器:tomcat

框架:spring mvc

测试流程:每次会把tomcat停止后,重新启动tomcat,进行第二次测试

controller定义

  jstl方法中直接返回视图;var方法中在视图中添加变量;如下:

    @RequestMapping("jstl")
public ModelAndView jstlTest() {
ModelAndView mv = new ModelAndView();
mv.setViewName("jstl");
return mv;
} @RequestMapping("var")
public ModelAndView varTest() {
ModelAndView mv = new ModelAndView();
mv.addObject("v", 120);
mv.setViewName("var");
return mv;
}

JSP页面

  jstl.jsp页面,使用jstl设置变量,然后使用el表达式在读出来。如下:

<c:set var="v" value="120"></c:set>
${v }

  var.jsp页面,在直接读取controller中的变量。如下:

${v }

  一切就绪了,下面是测试程序,对指定页面访问10w次:

@Test
public void testJstl() {
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
try {
String document = Jsoup.connect("http://localhost:8080/news/test/jstl").get().body().text();
System.out.println(document);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println(end + "-" + start + "=" + (end - start));
} @Test
public void testVar() {
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
try {
String document = Jsoup.connect("http://localhost:8080/news/test/var").get().body().text();
System.out.println(document);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println(end + "-" + start + "=" + (end - start));
}

测试结果

变量设置方式

开始时间

结束时间

耗时

controller

1479991964321

1479991897879

66442

jstl

1479991819067

1479991750981

68086

  只有一个变量的情况的下,访问10次,在controller中设置变量,比使用jstl中设置变量快了1718毫秒

测试两个变量的情况

  jstl页面如下:

<c:set var="v" value="120"></c:set>
<c:set var="v1" value="120"></c:set>
${v }
${v1 }

  var页面如下:

${v }
${v1 }

  controller中只有var方法有变动,如下:

@RequestMapping("var")
public ModelAndView varTest() {
ModelAndView mv = new ModelAndView();
mv.addObject("v", 120);
mv.addObject("v1", 120);
mv.setViewName("var");
return mv;
}

测试结果

变量设定方式 开始时间 结束时间 耗时
controller 1479991384043 1479991316874 67169
jstl 1479991153541 1479991084654 68887

测试用例取样值汇总

   测试一共取了五个值测试,不知道准确性怎么样,希望高手指点一二

变量个数

变量设置方式

开始时间

结束时间

耗时

1

controller

1479991964321

1479991897879

66442

jstl

1479991819067

1479991750981

68086

2

controller

1479991384043

1479991316874

67169

jstl

1479991153541

1479991084654

68887

4

controller

1479996126484

1479996055448

71036

jstl

1479995801444

1479995716369

85075

8

controller

1479996391785

1479996321319

70466

jstl

1479996573521

1479996500165

73356

16

controller

1479997049876

1479996974712

75164

jstl

1479996906690

1479996830374

76316

  测试结果在图表中展示,如下:

结论

  不管从数据还是折线图,都可以明显得出在controller中设置变量,使用el在jsp中读取的性能优于,在页面存储读取。但是此次的测试数据和我心中的结果差别还是比较大的,测试之前,认为性能差距会随着变量的数量增多,而更加明显,然而结果和我想的有些不一样。

最新文章

  1. angular 实现tab切换(循环输出tab标题及tab下属内容,非direct,非include)
  2. 【C#】【Thread】Semaphore/SemaphoreSlim信号量
  3. Nmap扫描手册
  4. 5. javacript高级程序设计-引用类型
  5. http-2.4.18 安装
  6. BSS Audio&#174; Introduces Full-Bandwidth Acoustic Echo Cancellation Algorithm for Soundweb London Conferencing Processors
  7. [cb]Unity 项目架构
  8. Esper系列(二)时间窗口、长度窗口、cast、注解、自定义函数、静态方法
  9. 【转】sublime text 2 下的Markdown写作
  10. ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端证书控制API访问
  11. JAVA课程设计个人博客 学生成绩管理 201521123023 戴建钊
  12. MVVM 框架解析之双向绑定
  13. C#基础(四)--值类型和引用类型,栈和堆的含义
  14. 浅谈对SpringMVC的认识
  15. js取数组最大值的四种方式
  16. 你值得拥有的Mac PS滤镜插件和特效处理软件合集,不要错过!
  17. Java Jvm运行机制原理
  18. cuda培训素材
  19. shell日常实战练习——通过监视用户登陆找到入侵者
  20. [转帖]第二个显示屏上禁用Windows任务栏

热门文章

  1. tips [终端]
  2. Hyper-V下的Linux虚拟机网卡丢失问题原因及解决办法
  3. Php ORM 对象关系映射
  4. C#方法的使用
  5. 单点登录CAS使用记(一):前期准备以及为CAS-Server配置SSL协议
  6. php生成短网址的思路与方法
  7. GET——token
  8. CWnd类
  9. jQuery 鼠标拖拽排序
  10. android使用apktool反编译出现Input file (d:\t) was not found or was not readable