web性能优化——JSP
一、啰嗦
做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中读取的性能优于,在页面存储读取。但是此次的测试数据和我心中的结果差别还是比较大的,测试之前,认为性能差距会随着变量的数量增多,而更加明显,然而结果和我想的有些不一样。
web性能优化——JSP的更多相关文章
- 关于WEB 性能优化 (摘抄)
压缩源代码和图片 JavaScript文件源代码可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG图片可以根据具体质量来压缩为50%到70%,PNG可以使用一些开源压缩软件来压缩,比如24色 ...
- Web性能优化-合并js与css,减少请求
Web性能优化已经是老生常谈的话题了, 不过笔者也一直没放在心上,主要的原因还是项目的用户量以及页面中的js,css文件就那几个,感觉没什么优化的.人总要进步的嘛,最近在被angularjs吸引着,也 ...
- web性能优化——浏览器相关
简介 优化是一个持续的过程.所以尽可能的不要有人为的参与.所以能自动化的或者能从架构.框架级别解决的就最更高级别解决. 这样即能实现面对开发人员是透明的.不响应,又能确保所有资源都是被优化过的. 场景 ...
- Web性能优化系列
web性能优化之重要,这里并不打算赘述.本系列课程将带领大家认识.熟悉.深刻体会并且懂得如果去为不同的站点做性能优化 同时,本系列将还会穿插浏览器兼容性相关问题的解决方案,因为在我看来,兼容性同样属于 ...
- 移动web性能优化笔记
移动web性能优化 最近看了一些文章,对移动web性能优化方法,做一个简单笔记 笔记内容主要出自 移动H5前端性能优化指南和移动前端系列——移动页面性能优化
- web性能优化 来自《web全栈工程师的自我修养》
最近在看<web全栈工程师的自我修养>一书,作者是来自腾讯的前端工程师.作者在做招聘前端的时候问应聘者web新能优化有什么了解和经验,应聘者思索后回答“在发布项目之前压缩css和 Java ...
- web性能优化之--合理使用http缓存和localStorage做资源缓存
一.前言 开始先扯点别的: 估计很多前端er的同学应该遇到过:在旧项目中添加新的功能模块.或者修改一些静态文件时候,当代码部署到线上之后,需求方验收OK,此时你送了一口气,当你准备开始得意于自己的ma ...
- Web 性能优化:Preload与Prefetch的使用及在 Chrome 中的优先级
摘要: 理解Preload与Prefetch. 原文:Web 性能优化:Preload,Prefetch的使用及在 Chrome 中的优先级 作者:前端小智 Fundebug经授权转载,版权归原作者所 ...
- Web 性能优化:21 种优化 CSS 和加快网站速度的方法
这是 Web 性能优化的第 4 篇,上一篇在下面看点击查看: Web 性能优化:使用 Webpack 分离数据的正确方法 Web 性能优化:图片优化让网站大小减少 62% Web 性能优化:缓存 Re ...
随机推荐
- <customErrors>节点说明1
<customErrors>节点用于定义一些自定义错误信息的信息.此节点有Mode和defaultRedirect两个属性, 其中defaultRedirect属性是一个可选属性,表示应用 ...
- ruby 知识点
$LOAD_PATH 执行 require 读取文件时搜索的目录名数组,也可以写作 $: 创建 URI 的时候可以直接这样 URI("http://www.dy2018.com/i/9751 ...
- Windows 下 SVN 服务器配置
1.下载文件, 下载最新版本subversion,我这里选择VisualSVN-Server-2.5.7.exe 2.安装Subversion 服务器 由于我下载的是setup.exe版本 ...
- 装饰(Decorator)模式
1.装饰(Decorator)模式 动态给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更为灵活.Component是定义一个对象接口.可以给这些对象动态地添加职责.Concre ...
- java 对list中对象按属性排序
实体对象类 --略 排序类----实现Comparator接口,重写compare方法 package com.tang.list; import java.util.Comparator; publ ...
- LINQ动态查询类--[DynamicLinqExpressions]
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.L ...
- 13 hbase连接
Configuration conf=new Configuration(); String zookeeper=""; String clientport="; Str ...
- java IO 实例分析
初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见 ...
- 安装.net framework 4.0失败,出现HRESULT 0xc8000222错误代码
安装了一上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了 和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了! 方法: 1 ...
- Oracle错误问题---- 《ora-12638:身份证明检索失败》
使用客户端可以连接,但只有一个站点出现此问题,非常郁闷,网上查了一下,发现是用户认证问题,解决办法如下: 在ORACLE客户端目录下 NETWORK/ADMIN下的sqlnet.ora,使用记事本打开 ...