Я сделал тест производительности. В производительности очень мало различий, так что это не проблема.
Как я сделал тест
Я создал 500 отдельных тегов (программно) в одной из наших библиотек тегов. (Так что он завернут в банку и т. Д.)
Все они выглядят так, с единственной разницей в числе:
package XX.XX.XX.XX
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class Test0001Tag extends TagSupport {
public Test0001Tag() {
}
public int doStartTag() throws JspException {
try {
pageContext.getOut().print("<div class=\"Test0001\">");
} catch (IOException e) {
throw new JspException(e);
}
return EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspException {
try {
pageContext.getOut().print("</div>");
} catch (IOException e) {
throw new JspException(e);
}
return EVAL_PAGE;
}
public void release() {
super.release();
}
}
А затем 500 записей в TLD, как это:
<tag>
<name>test0001</name>
<tagclass>XX.XX.XX.XX.Test0001Tag</tagclass>
<bodycontent>JSP</bodycontent>
</tag>
Затем я взял JSP с небольшим кодом и сделал две копии: одну со статическим HTML, а другую с тегами.
Тот, что со статическим HTML:
<!--
<%long start = System.currentTimeMillis();%>
<% for (int i = 0; i < 1000; i++) { %>
<div class="Test0001">X</div>
<div class="Test0002">X</div>
<div class="Test0003">X</div>
...
<div class="Test0498">X</div>
<div class="Test0499">X</div>
<div class="Test0500">X</div>
<% } %>
<%System.out.println(System.currentTimeMillis()-start);%>
-->
Тот, с тегами:
<!--
<%long start = System.currentTimeMillis();%>
<% for (int i = 0; i < 1000; i++) { %>
<bddesign:test0001>X</bddesign:test0001>
<bddesign:test0002>X</bddesign:test0002>
<bddesign:test0003>X</bddesign:test0003>
...
<bddesign:test0498>X</bddesign:test0498>
<bddesign:test0499>X</bddesign:test0499>
<bddesign:test0500>X</bddesign:test0500>
<% } %>
<%System.out.println(System.currentTimeMillis()-start);%>
-->
Цикл был введен, потому что оба вышли с нулевыми миллисекундами. (К сожалению, я запускаю Windows на работе, поэтому я не получаю много точности здесь.)
Тот факт, что 500 тегов не дают измеримую задержку, может быть достаточным ответом, но я хотел большего, даже если повторение может позволить некоторую оптимизацию.
Результат на 500 000 тегов:
- JSP-метки: 15-19 секунд
- HTML-теги: 12-16 секунд
Так что есть разница, но я думаю, что она незначительна по сравнению со всем, что происходит от кликов пользователя до ответа на экране.
Другие мысли
Насколько я знаю, степень детализации в Windows составляет около 15-16 миллисекунд. Таким образом, «0 миллисекунд» фактически означает «<16 миллисекунд». Задержка менее 16/500 миллисекунд pr. тег вполне приемлем. </p>
Я пытался с 1000 тегами, но JSP-компилятор был очень недоволен этим. Я уменьшил до 500 тегов, потому что альтернативой было изменить настройку, которая делала бы мои результаты недействительными.
Я сделал сгенерированный HTML-HTML-комментарий, потому что браузер находится на той же физической машине, что и тестовый сервер, и я боялся, что браузер потребует слишком много времени загрузки процессора, даже с двухъядерным ЦПУ. Простым решением было прокомментировать HTML.