Struts 2パフォーマンスチューニングブロッキング
7312 ワード
私たちが仕事の中でいくつかの小さな需要を実現する必要がある場合は、まず簡単な調査を行って、使用しているオープンソースフレームワークが私たちが必要とする機能を備えているかどうかを見てみましょう.そうすれば、車輪を繰り返し発明する必要はありません.
次に、パフォーマンステストを例に、Struts 2フレームワークがこの機能を備えているかどうかを調査します.
1.struts-default.xml
Struts 2の多くのコア機能は内部ブロッキングに基づいて実現されているので、まずパフォーマンスチューニングに関連するブロッキングがあるかどうかを見てみましょう.strut 2-core-2.3.1.2.jarのデフォルトプロファイルstruts-default.xmlを表示する必要があります.
Struts 2は百宝箱のように多くのブロッキングを内蔵しており、profilingが私たちのニーズに合ったブロッキングである可能性が高いことがわかります.では、今からソースを開けてみましょう.
2.ProfilingActivationInterceptor
org.apache.struts2.interceptor.ProfilingActivationInterceptor.java
ソースコードから、ブラウザから送信されたHTTP要求パラメータにprofiling=trueまたはyesが含まれている限り、パフォーマンスブロッカーはTimerツールクラスを開き、Actionの実行にかかる時間を印刷することがわかります.
3.struts.xml
profilingブロッキングはデフォルトのdefaultStackに含まれていないので、まずカスタムブロッキングスタックに追加します.
4.userview.js
これでAJAX呼び出しパラメータを修正し、profilingパラメータを追加してパフォーマンスチューニングを開始できます.
5.最終効果
印刷結果は以下のようになります.アクションメソッドの実行時間とResultのレンダリング時間は、合計実行時間に加えてそれぞれリストされます.
次に、パフォーマンステストを例に、Struts 2フレームワークがこの機能を備えているかどうかを調査します.
1.struts-default.xml
Struts 2の多くのコア機能は内部ブロッキングに基づいて実現されているので、まずパフォーマンスチューニングに関連するブロッキングがあるかどうかを見てみましょう.strut 2-core-2.3.1.2.jarのデフォルトプロファイルstruts-default.xmlを表示する必要があります.
Struts 2は百宝箱のように多くのブロッキングを内蔵しており、profilingが私たちのニーズに合ったブロッキングである可能性が高いことがわかります.では、今からソースを開けてみましょう.
2.ProfilingActivationInterceptor
org.apache.struts2.interceptor.ProfilingActivationInterceptor.java
public class ProfilingActivationInterceptor extendsAbstractInterceptor {
private String profilingKey = "profiling";
private boolean devMode;
@Inject(StrutsConstants.STRUTS_DEVMODE)
public void setDevMode(String mode) {
this.devMode = "true".equals(mode);
}
@Override
public String intercept(ActionInvocationinvocation) throws Exception {
if (devMode) {
Object val =invocation.getInvocationContext().getParameters().get(profilingKey);
if (val != null) {
String sval = (val instanceof String ?(String)val : ((String[])val)[0]);
boolean enable = "yes".equalsIgnoreCase(sval)|| "true".equalsIgnoreCase(sval);
UtilTimerStack.setActive(enable);
invocation.getInvocationContext().getParameters().remove(profilingKey);
}
}
return invocation.invoke();
}
}
ソースコードから、ブラウザから送信されたHTTP要求パラメータにprofiling=trueまたはyesが含まれている限り、パフォーマンスブロッカーはTimerツールクラスを開き、Actionの実行にかかる時間を印刷することがわかります.
3.struts.xml
profilingブロッキングはデフォルトのdefaultStackに含まれていないので、まずカスタムブロッキングスタックに追加します.
true
result
false
4.userview.js
これでAJAX呼び出しパラメータを修正し、profilingパラメータを追加してパフォーマンスチューニングを開始できます.
function searchAllUser(){
jQuery.ajax({
type:"post",
url: "searchAllUser.action",
processData:true,
dataType:'json',
data:jQuery("#userQueryForm").serialize() + "&profiling=yes",
success:function(data) {
if (data.status == 1) {
alert(" ");
generateTableFromJson("result", data.resultRows);
} else {
alert(" ");
}
}
});
}
5.最終効果
印刷結果は以下のようになります.アクションメソッドの実行時間とResultのレンダリング時間は、合計実行時間に加えてそれぞれリストされます.