[mayaa-user:1015] XPathMatchesInjectionResolverの高速化について

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2014年 3月 15日 (土) 20:05:43 JST


石上です。

mayaaを使用させて頂いているWebサイトで、
複雑なテンプレートを扱うとテンプレートのビルドが遅くなる状況が発生しています。
プロファイラによって調べてみると下記の箇所が原因の一つではないかと思われてます。

XPathMatchesInjectionResolver.getXPathNodes(SpecificationNode, List)

実際に、
org.seasar.mayaa.provider.ServiceProvider
を書き換えて
<resolver class="org.seasar.mayaa.impl.builder.injection.XPathMatchesInjectionResolver"/>
をコメントアウトすると、ビルド時間が1/10に短縮されました。

しかし実際にはmayaaファイルでm:xpathを使用してしまっておりますので、
今更XPathMatchesInjectionResolverをやめるという選択肢はなく、
XPathMatchesInjectionResolverをある程度高速化出来ないかと検討しています。
(その際、多少の機能制限があってもしかたがないと思っています)

getXPathNodes()
の実装を読ませていただきますと、
mayaaファイル全体をなめて再帰的に
getXPathNodes()
を呼び出しています。

この呼出が、getNode()から呼ばれていますので、
テンプレートの全部の要素からgetXPathNodes()
の再帰ループが呼ばれているように見受けられます。

mayaaファイル全体をなめるのであれば、
mayaaファイル毎に、結果のリストをキャッシュして、
2回目以降はキャッシュを利用するようにすれば高速化出来るのではないかと思われますが、
そのようなアプローチは可能でしょうか?


mayaa-user メーリングリストの案内