jsp在服务器上被转为java代码运行的吧,理论上不应该一样?

解决方案 »

  1.   

    jsp会被容器转换成java代码,说白了,就是编译路径上多走了一步。
      

  2.   

    你好。你的意思是jsp不像java那样运行前编译,而在运行时编译吗?
    就像修改Jsp页面时tomcat不自动重启,修改java代码时会重启那样?
    这个问题比较小白,请息怒
      

  3.   

    你好。你的意思是jsp不像java那样运行前编译,而在运行时编译吗?
    就像修改Jsp页面时tomcat不自动重启,修改java代码时会重启那样?
    这个问题比较小白,请息怒只有第一次访问该Jsp页面会预处理和重新编译吧?第二次访问应该就一样了。
    可是同一个页面刷新多次,我把时间打印出来对比一下,耗时60多s,几次只相差几百ms,相同代码放在Java代码里运行能缩短1/3时间,大约40s。
      

  4.   

    并不觉得jsp中写java代码会比别的地方慢,我觉得你比较的方式有问题,刷新页面还有网络IO所花费的时间
      

  5.   

    在Jsp中做string的拼接和在java中拼接,花费时间有明显差别
      

  6.   

    在Jsp中做string的拼接和在java中拼接,花费时间有明显差别经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别
      

  7.   

    在Jsp中做string的拼接和在java中拼接,花费时间有明显差别经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别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秒。
      

  8.   

    猜测这样 ,没有深入研究
    jsp -> servlet  -> class
    java -> class
      

  9.   

    统计的时间是从for循环前到循环后,不包括打开页面的时间,应该和转servlet时间无关。
    而且第一次打开jsp需要这一步,但第二次打开应该不用了。
    不知为何
      

  10.   

    在Jsp中做string的拼接和在java中拼接,花费时间有明显差别经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别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秒。个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰
    还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒
      

  11.   

    在Jsp中做string的拼接和在java中拼接,花费时间有明显差别经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别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秒。个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰
    还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒
    把这段代码从jsp放到action里就能从3mins提高到1min40s。生产上这个action就是跳转到jsp之前的action。应该能排除main方法过于简单的可能
      

  12.   

    在Jsp中做string的拼接和在java中拼接,花费时间有明显差别经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别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秒。个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰
    还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒
    把这段代码从jsp放到action里就能从3mins提高到1min40s。生产上这个action就是跳转到jsp之前的action。应该能排除main方法过于简单的可能
    或许跟采用的容器有关,我用的jetty,有时候jsp跑的速度还快一些,但你的代码我跑真只要十多秒,个人觉得这个真不太像是机器性能的问题,我CPU E3V5,你CPU应该不会差这么多吧
      

  13.   

    在Jsp中做string的拼接和在java中拼接,花费时间有明显差别经过测试,字符串拼接10W次,直接main函数执行和在web容器中运行时间大概差距在一秒钟,一个11秒多,一个12秒多写在controller中和jsp中,执行时间几乎相同,没有你说的那种差别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秒。个人觉得这个应该是你的环境问题,main方法毕竟是简单的单线程环境,实际线上确实多线程环境,线程切换也会影响代码实际运行速度,你可以弄一个简单的web项目,这样才能尽量排除干扰
    还有能吐槽下你的机器么...我代码跟你一模一样,只需要12秒,你要60秒
    把这段代码从jsp放到action里就能从3mins提高到1min40s。生产上这个action就是跳转到jsp之前的action。应该能排除main方法过于简单的可能
    或许跟采用的容器有关,我用的jetty,有时候jsp跑的速度还快一些,但你的代码我跑真只要十多秒,个人觉得这个真不太像是机器性能的问题,我CPU E3V5,你CPU应该不会差这么多吧测试环境E5V2,在action里和在jsp里有明显区别。3min和1min40s就是在这个环境测的。代码里不仅有string拼接,还有其他的操作。和你的机器跑出来有区别应该正常。我比较关心的是同一段代码放在两个位置区别很大。
      

  14.   

    效率什么的都是浮云 主要是别让jsp有当视图又处理业务  所以都是分开写的
      

  15.   

    jsp 第一次运行的时候会先转换为 servlet,再编译 servlet,最后才运行
    如果有差别,应该是页面第一次被访问时会有点慢。不过现在的PC机都比较快了,再加上IDE的支持,基本上感觉不到这点时间上的延迟了。最后,我们没必要去纠结这么点运行效率的差异。真的一个系统开发出来,有这么一点点效率损失其实没太大的影响。毕竟,一个页面如果0.1秒生成和0.11秒生成,人基本上感觉不出来。想提高Java应用程序的运行效率,关注的重点不在这些小问题上。
      

  16.   

    这也是我把代码放到action的原因之一
      

  17.   

    jsp -> servlet  -> class
    java -> class
      

  18.   

    jsp在被第一次访问的时候,容器会把jsp翻译为一个servlet,然后再进行编译执行,要说效率的话就只是再这里有差别,不过现在的机器配置都不低,这点时间完全可以忽略。