アセットのデータ取得方法によるパフォーマンス測定(その2)

前回:アセットのデータ取得方法によるパフォーマンス測定(その1)

前回に引き続き、今回も、アセット(フレックスファミリーアセット)のデータを取得するのに、より速い取得の方法はないか調べてみたいと思います。

今回は、Asset APIがどのくらい速いのか、Asset APIと、assetset:getmultiplevaluesタグで測ってみます。

前回と同様、アセット10コ、50コ、100コで計測してみましょう。
データの取得は、アセットがもつ属性から適当に20コ(すべて単一)を選んでみます。

では、テスト用のテンプレートをそれぞれ作ります。

1)Asset API

List listAttrNames = new ArrayList();
//20コ取得
listAttrNames.add("testA");
listAttrNames.add("testB");
listAttrNames.add("testC");
listAttrNames.add("testD");
listAttrNames.add("testE");
listAttrNames.add("testF");
listAttrNames.add("testG");
listAttrNames.add("testH");
listAttrNames.add("testI");
listAttrNames.add("testJ");
listAttrNames.add("testK");
listAttrNames.add("testL");
listAttrNames.add("testM");
listAttrNames.add("testN");
listAttrNames.add("testO");
listAttrNames.add("testP");
listAttrNames.add("testQ");
listAttrNames.add("testR");
listAttrNames.add("testS");

Session ses = SessionFactory.getSession();
AssetDataManager mgr = (AssetDataManager) ses.getManager(AssetDataManager.class.getName());

%><ics:if condition='<%=ics.GetList("listTests")!=null && ics.GetList("listTests").hasData()%>'><ics:then><%
 %><ics:listloop listname="listTests"><%
 %><ics:listget listname="listTests" fieldname="id" output="o_AssetId"/><%

String baseAssetId = ics.GetVar("o_AssetId");
 AssetId id = new AssetIdImpl( "TestAsset_C", Long.parseLong(baseAssetId));
 Iterable<AssetData> dataItr = mgr.read( Collections.singletonList( id ) );

for( AssetData data : dataItr )
 {
 for(int y=0; y<listAttrNames.size(); y++) {
 AttributeData atrData = data.getAttributeData((String)listAttrNames.get(y));

}
 }

%></ics:listloop><%
%></ics:then></ics:if><%

2)assetset:getmultiplevaluesタグ
前回と同様ですので省略します。前回はこちら

測定開始です。

・・・測定・・・測定・・・測定・・・。

出ました。結果です。

アセット数

取得属性数

AssetAPI

assetset:getmultiplevaluesタグ

10

20

735ms

84ms

50

20

5437ms

353ms

100

20

9085ms

869ms

※動作環境や定義がもつ属性の数によって変動はあります。正確な数値ではありません。
※同じアセットタイプ、同じ定義で、すべて異なるアセットを使っています。
※フレックスアセットの参照はassetset:setassetタグを使っています。
※3回実行し、その平均値になります。

結果に驚きました。桁が違いますね。assetset:getmultiplevaluesタグが速いというより、Asset APIが遅いです。よくわかったことは、アセットデータを取得するのにAsset APIを使っては危険ということです。管理サイトのカスタマイズなど、管理側の機能に限定して使ったほうが良いかもしれません。

ということで、季節は春です。暖かくなってきました。春に向けての準備など、やりたいことがいろいろありますね。会社では新入社員が入ってくるので新人教育の準備、外では桜の花が咲き始めているので花見の準備、家では車の冬用タイヤをノーマルタイヤへの交換、あ、それは私だけですね。
花見ですが、東京では3月末に開花しているので、今週は絶好の美味しいお酒を味わえそうですね。

sakura_L