Jsp里写java代码的运行效率为什么低于在java代码里写的?

gyge96 2018-03-19 09:14:09
jsp在服务器上被转为java代码运行的吧,理论上不应该一样?
...全文
999 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
~平凡之人~ 2018-03-23
  • 打赏
  • 举报
回复
jsp在被第一次访问的时候,容器会把jsp翻译为一个servlet,然后再进行编译执行,要说效率的话就只是再这里有差别,不过现在的机器配置都不低,这点时间完全可以忽略。
足球中国 2018-03-20
  • 打赏
  • 举报
回复
只是比较代码是一样的。你应该比较的是运行环境。以及有没有使用缓存
qinykuo 2018-03-20
  • 打赏
  • 举报
回复
jsp -> servlet -> class java -> class
weixin_41868129 2018-03-20
  • 打赏
  • 举报
回复
学习了, 不是设计有问题的话,现在基本靠硬件。
小灰狼 2018-03-20
  • 打赏
  • 举报
回复
引用 24 楼 weixin_39309867 的回复:
[quote=引用 21 楼 qinykuo 的回复:] jsp -> servlet -> class java -> class
这个应该是正解[/quote] 即使有差别,也是第一次运行页面时才要进行转换和编译,以后应该都是一样的
诺丽果 2018-03-20
  • 打赏
  • 举报
回复
引用 21 楼 qinykuo 的回复:
jsp -> servlet -> class java -> class
这个应该是正解
gyge96 2018-03-19
  • 打赏
  • 举报
回复
引用 4 楼 maradona1984 的回复:
并不觉得jsp中写java代码会比别的地方慢,我觉得你比较的方式有问题,刷新页面还有网络IO所花费的时间
在Jsp中做string的拼接和在java中拼接,花费时间有明显差别
maradona1984 2018-03-19
  • 打赏
  • 举报
回复
并不觉得jsp中写java代码会比别的地方慢,我觉得你比较的方式有问题,刷新页面还有网络IO所花费的时间
狼二羊 2018-03-19
  • 打赏
  • 举报
回复
学习一波。。。。
gyge96 2018-03-19
  • 打赏
  • 举报
回复
引用 16 楼 hemowolf 的回复:
jsp 第一次运行的时候会先转换为 servlet,再编译 servlet,最后才运行 如果有差别,应该是页面第一次被访问时会有点慢。不过现在的PC机都比较快了,再加上IDE的支持,基本上感觉不到这点时间上的延迟了。 最后,我们没必要去纠结这么点运行效率的差异。真的一个系统开发出来,有这么一点点效率损失其实没太大的影响。毕竟,一个页面如果0.1秒生成和0.11秒生成,人基本上感觉不出来。想提高Java应用程序的运行效率,关注的重点不在这些小问题上。
差异较大,生产上的表现和测试环境相同。经过优化业务人员就不抱怨了,但是原理未知
gyge96 2018-03-19
  • 打赏
  • 举报
回复
引用 15 楼 hjgzj 的回复:
效率什么的都是浮云 主要是别让jsp有当视图又处理业务 所以都是分开写的
这也是我把代码放到action的原因之一
gyge96 2018-03-19
  • 打赏
  • 举报
回复
引用 2 楼 gyge96 的回复:
[quote=引用 1 楼 qq_17495033 的回复:] jsp会被容器转换成java代码,说白了,就是编译路径上多走了一步。
你好。你的意思是jsp不像java那样运行前编译,而在运行时编译吗? 就像修改Jsp页面时tomcat不自动重启,修改java代码时会重启那样? 这个问题比较小白,请息怒[/quote] 只有第一次访问该Jsp页面会预处理和重新编译吧?第二次访问应该就一样了。 可是同一个页面刷新多次,我把时间打印出来对比一下,耗时60多s,几次只相差几百ms,相同代码放在Java代码里运行能缩短1/3时间,大约40s。
gyge96 2018-03-19
  • 打赏
  • 举报
回复
引用 1 楼 qq_17495033 的回复:
jsp会被容器转换成java代码,说白了,就是编译路径上多走了一步。
你好。你的意思是jsp不像java那样运行前编译,而在运行时编译吗? 就像修改Jsp页面时tomcat不自动重启,修改java代码时会重启那样? 这个问题比较小白,请息怒
做一个梦想家 2018-03-19
  • 打赏
  • 举报
回复
jsp会被容器转换成java代码,说白了,就是编译路径上多走了一步。
小灰狼 2018-03-19
  • 打赏
  • 举报
回复
jsp 第一次运行的时候会先转换为 servlet,再编译 servlet,最后才运行 如果有差别,应该是页面第一次被访问时会有点慢。不过现在的PC机都比较快了,再加上IDE的支持,基本上感觉不到这点时间上的延迟了。 最后,我们没必要去纠结这么点运行效率的差异。真的一个系统开发出来,有这么一点点效率损失其实没太大的影响。毕竟,一个页面如果0.1秒生成和0.11秒生成,人基本上感觉不出来。想提高Java应用程序的运行效率,关注的重点不在这些小问题上。
  • 打赏
  • 举报
回复
效率什么的都是浮云 主要是别让jsp有当视图又处理业务 所以都是分开写的
gyge96 2018-03-19
  • 打赏
  • 举报
回复
引用 13 楼 maradona1984 的回复:
[quote=引用 12 楼 gyge96 的回复:] [quote=引用 11 楼 maradona1984 的回复:] [quote=引用 7 楼 gyge96 的回复:] [quote=引用 6 楼 maradona1984 的回复:] [quote=引用 5 楼 gyge96 的回复:] [quote=引用 4 楼 maradona1984 的回复:] 并不觉得jsp中写java代码会比别的地方慢,我觉得你比较的方式有问题,刷新页面还有网络IO所花费的时间
在Jsp中做string的拼接和在java中拼接,花费时间有明显差别[/quote] 经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多 写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别[/quote] String s = new String(); long start = System.currentTimeMillis(); for(int i = 0; i < 100000; i++){ s=s+i; } long end = System.currentTimeMillis(); System.out.println("time="+ (end-start)); 这段代码在jsp中执行花费64秒,在main方法里花费41秒。这是我的机器 实际开发过程中用公司的机器甚至放到服务器上也有明显区别,能从3分钟降到1分40秒。[/quote] 个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰 还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒[/quote] 把这段代码从jsp放到action里就能从3mins提高到1min40s。生产上这个action就是跳转到jsp之前的action。应该能排除main方法过于简单的可能[/quote] 或许跟采用的容器有关,我用的jetty,有时候jsp跑的速度还快一些,但你的代码我跑真只要十多秒,个人觉得这个真不太像是机器性能的问题,我CPU E3V5,你CPU应该不会差这么多吧[/quote] 测试环境E5V2,在action里和在jsp里有明显区别。3min和1min40s就是在这个环境测的。代码里不仅有string拼接,还有其他的操作。和你的机器跑出来有区别应该正常。我比较关心的是同一段代码放在两个位置区别很大。
maradona1984 2018-03-19
  • 打赏
  • 举报
回复
引用 12 楼 gyge96 的回复:
[quote=引用 11 楼 maradona1984 的回复:] [quote=引用 7 楼 gyge96 的回复:] [quote=引用 6 楼 maradona1984 的回复:] [quote=引用 5 楼 gyge96 的回复:] [quote=引用 4 楼 maradona1984 的回复:] 并不觉得jsp中写java代码会比别的地方慢,我觉得你比较的方式有问题,刷新页面还有网络IO所花费的时间
在Jsp中做string的拼接和在java中拼接,花费时间有明显差别[/quote] 经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多 写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别[/quote] String s = new String(); long start = System.currentTimeMillis(); for(int i = 0; i < 100000; i++){ s=s+i; } long end = System.currentTimeMillis(); System.out.println("time="+ (end-start)); 这段代码在jsp中执行花费64秒,在main方法里花费41秒。这是我的机器 实际开发过程中用公司的机器甚至放到服务器上也有明显区别,能从3分钟降到1分40秒。[/quote] 个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰 还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒[/quote] 把这段代码从jsp放到action里就能从3mins提高到1min40s。生产上这个action就是跳转到jsp之前的action。应该能排除main方法过于简单的可能[/quote] 或许跟采用的容器有关,我用的jetty,有时候jsp跑的速度还快一些,但你的代码我跑真只要十多秒,个人觉得这个真不太像是机器性能的问题,我CPU E3V5,你CPU应该不会差这么多吧
gyge96 2018-03-19
  • 打赏
  • 举报
回复
引用 11 楼 maradona1984 的回复:
[quote=引用 7 楼 gyge96 的回复:] [quote=引用 6 楼 maradona1984 的回复:] [quote=引用 5 楼 gyge96 的回复:] [quote=引用 4 楼 maradona1984 的回复:] 并不觉得jsp中写java代码会比别的地方慢,我觉得你比较的方式有问题,刷新页面还有网络IO所花费的时间
在Jsp中做string的拼接和在java中拼接,花费时间有明显差别[/quote] 经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多 写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别[/quote] String s = new String(); long start = System.currentTimeMillis(); for(int i = 0; i < 100000; i++){ s=s+i; } long end = System.currentTimeMillis(); System.out.println("time="+ (end-start)); 这段代码在jsp中执行花费64秒,在main方法里花费41秒。这是我的机器 实际开发过程中用公司的机器甚至放到服务器上也有明显区别,能从3分钟降到1分40秒。[/quote] 个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰 还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒[/quote] 把这段代码从jsp放到action里就能从3mins提高到1min40s。生产上这个action就是跳转到jsp之前的action。应该能排除main方法过于简单的可能
maradona1984 2018-03-19
  • 打赏
  • 举报
回复
引用 7 楼 gyge96 的回复:
[quote=引用 6 楼 maradona1984 的回复:] [quote=引用 5 楼 gyge96 的回复:] [quote=引用 4 楼 maradona1984 的回复:] 并不觉得jsp中写java代码会比别的地方慢,我觉得你比较的方式有问题,刷新页面还有网络IO所花费的时间
在Jsp中做string的拼接和在java中拼接,花费时间有明显差别[/quote] 经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多 写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别[/quote] String s = new String(); long start = System.currentTimeMillis(); for(int i = 0; i < 100000; i++){ s=s+i; } long end = System.currentTimeMillis(); System.out.println("time="+ (end-start)); 这段代码在jsp中执行花费64秒,在main方法里花费41秒。这是我的机器 实际开发过程中用公司的机器甚至放到服务器上也有明显区别,能从3分钟降到1分40秒。[/quote] 个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰 还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒
加载更多回复(5)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧