JSFのデータテーブルを使用してのレスポンステスト
ひがやすおさんにJSFはDataTableあたりが重いと指摘されたのでやってみた。
比較は生産性は死ぬほど悪いけど、よく使われるStruts1.2で。
<table border="1"> <tr> <td>名前</td><td>価格</td> </tr> <c:forEach items="${items}" var="item"> <tr> <td><c:out value="${item.name}" /></td> <td><c:out value="${item.price}" /></td> </tr> </c:forEach> </table>
<h:dataTable value="#{sessionBean.items}" var="item" border="1"> <h:column > <f:facet name="header"> <h:outputText value="名前" /> </f:facet> <h:outputText value="#{item.name}" /> </h:column> <h:column > <f:facet name="header"> <h:outputText value="価格" /> </f:facet> <h:outputText value="#{item.price}" /> </h:column> </h:dataTable>
結果
★URL:http://localhost:8080/StrutsTest/test.do 平均3.30ms ------------------------------ ★URL:http://localhost:8080/JSFTest/faces/welcomeJSF.jsp 平均5.55ms ------------------------------
おおむね1.68倍くらい重いってことかな?
実際のところアクションモデルとコンポーネントモデルとでは設計そのものが大きく違うことから単純には比較できないのだけれども。たまにJSFでStruts等と同じ開発方法でやってる人をみかけるけど、アレじゃパフォーマンスばかり落ちてダメだと思う。スタンドアロンのWindowアプリケーションと同じ方式で開発しないとね。
ちなみにICEFacesだと同じ画面を出すのに初回20msくらいかかる。しかし、この後の操作はすべてAJAXで完結することからユーザーの体感が画面遷移を伴うStrutsと比較してもかなりよろしい。それでいて開発がJSF以上に容易(逆にJSF以上に開発をActionベースで考えるとつらくなる)というのが面白い。