我有一个包含大量HTML代码的JSP。有许多内部div,spans和h2标签。 HTML代码是由scriplets使用一些for循环生成的。
我使用以下方法测量scriptlet进程:
<% long time = System.currentTimeMillis(); %>
// here is the entire page data
<% System.out.println("Time : " + (System.currentTimeMillis()-time)); %>
根据此测量,处理时间为300-350毫秒。
为了发现造成延迟的部分,我做了类似的事情:
<% long time = System.currentTimeMillis(); %>
// Some HTML Blocks
<% System.out.println("Time1 : " + (System.currentTimeMillis()-time)); %>
// Another HTML Blocks
<% System.out.println("Time2 : " + (System.currentTimeMillis()-time)); %>
但是,我意识到有时即使我执行以下操作,即使printlns之间没有html块,时间值仍然会发生变化!
<% long time = System.currentTimeMillis(); %>
// Some Blocks
<% System.out.println("Time1 : " + (System.currentTimeMillis()-time)); %>
<% System.out.println("Time2 : " + (System.currentTimeMillis()-time)); %>
输出是:
Time1 : 65
Time2 : 208
那么减慢我页面的速度是什么?我怎样才能发现这一点?
Scriptlet在处理繁重的HTML代码时是否存在性能弱点?
-----更新------
这是输出:
first : 0
Sec : 0
thr : 0
fr : 180
Total : 180
thr和fr之间没有任何东西,但fr值是180!
答案 0 :(得分:1)
JSP是下面的java类。不应该有任何性能影响。但是Scriptlet是不好的做法,所以除非这只是为了进行基准测试,否则我不会这样做。
打印到控制台时也会产生管理费用。所以,当你计算:
<% System.out.println("Time2 : " + (System.currentTimeMillis()-time)); %>
您正在添加进行println调用所需的所有时间。如果你想要更准确的阅读,你应该这样做:
<% long time2 = System.currentTimeMillis(); %>
仅计算JSP最后的时间。不要在JSP中间计算/打印结果,因为您会看到无效的结果。
顺便说一句,我看到你说你正在使用for循环。您应该查看JSTL核心库:https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/tld-summary.html