JSFもJMeterでレスポンステストしてみる
昨日のJMeterを使ったテストが面白かったので今回はJSFをやってみる。
重い重いといわれてるので、どれだけ他のフレームワークより重いのかの検証。ただ、ポストバックは面倒だったのでポストバックじゃないほうで。各種スコープに沿った管理Beanの生成やレンダーフェーズは飛ばしてないから多少は参考になるかな。
実行はGlassfish V3に付属のMojarraで。つまり、RI。一番出来が良いといわれているJSF 1.2の実装だ。
実装
管理Beanのコード。
public class TestBean { public String getMessage() { return "ほげほげ"; } }
JSPファイル。NetBeansでJSFフレームワークを利用した場合デフォルトで生成されるJSPの
<%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1><h:outputText value="#{testBean.message}" /></h1> </body> </html> </f:view>
環境設定ファイル。
<?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ================================== --> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <managed-bean> <managed-bean-name>testBean</managed-bean-name> <managed-bean-class>TestBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> </faces-config>
実行!
んー。パフォーマンスめちゃくちゃ良い。ちょっと驚いた。
EJBでも使ってみる
他はコンテナ管理してるけど、JSFの管理Beanはスコープ管理しかしてないからちょっと差がありすぎるかな。EJBをインジェクトしてみる。
EJBは以下のコード
@Stateless public class TestEJB { public String getMessage(){ return "EJBからほげほげ"; } }
管理beanを以下のように変更。
public class TestBean { @EJB private TestEJB testEJB; public String getMessage() { return testEJB.getMessage(); } }
んー?
変わらないや。サンプル数1000にして試してみたけど、遅いパターンが現れず、ずっと安定して15ms以下くらいが続く。
まぁ、いいか。EJBはオブジェクトプールで使いまわされてると思うのだが、requestのほうはどう考えても毎回破棄されてるよね。あまりにコンパクトだからnew世代のGCで消えてるのかな。でもそうなるとコンパクトを売りにしてるT2Framework、というかLucyのほうも重くなるとは考えにくい。SimpleAdapterとかGuiceとか他のアダプタをやってみるとまた変わってくるのかな。