性能テストを行いました。性能差はほとんどないので問題ありません。
テストの作り方
タグ ライブラリの 1 つで、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();
}
}
そして、TLD の 500 エントリは次のようになります。
<tag>
<name>test0001</name>
<tagclass>XX.XX.XX.XX.Test0001Tag</tagclass>
<bodycontent>JSP</bodycontent>
</tag>
次に、小さなコードを含む JSP を取得し、2 つのコピーを作成しました。1 つは静的 HTML を含み、もう 1 つはタグを含みます。
静的 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);%>
-->
ループが導入されたのは、どちらも 0 ミリ秒で出てきたためです。(残念ながら、私は仕事で Windows を実行しているので、ここではあまり精度が得られません。) 500 個のタグで測定可能な遅延が発生しなかったという事実は十分な答えになる可能性がありますが、繰り返しが許されるとしても、もっと欲しかったです。いくつかの最適化。
500 000 タグの結果:
- JSP タグ: 15 ~ 19 秒
- HTML タグ: 12 ~ 16 秒
違いはありますが、ユーザーがクリックしてから回答が画面に表示されるまでの他のすべてのことと比較すると、重要ではないと思います。
他の考え
私の知る限り、Windows の粒度は約 15 ~ 16 ミリ秒です。したがって、「0ミリ秒」は実際には「<16ミリ秒」を意味します。16/500 ミリ秒未満の遅延。タグはかなり受け入れられます。
1000 個のタグを試してみましたが、JSP コンパイラはこれに非常に不満でした。別の方法として設定を変更すると結果が無効になるため、タグを 500 個に減らしました。
生成された HTML を HTML コメントにしました。これは、ブラウザーがテスト サーバーと同じ物理マシン上にあり、デュアルコア CPU を使用しても、ブラウザーのレンダリングに CPU 時間がかかりすぎるのではないかと心配したためです。簡単な解決策は、HTML にコメントを付けることでした。