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

suga [E-MAIL ADDRESS DELETED]
2014年 3月 16日 (日) 19:21:11 JST


suga です。

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

XPath の処理回数を減らさないとあまり効果は無いかもしれません。

MayaaのビルドはHTML側の要素を起点として.mayaa側を参照しに行くのですが、
XPathとしてはその逆が本来のあり方ですので、処理速度を上げるには

- XPathMatchesInjectionResolver 側のインスタンスでテンプレートをスキャン、
- その結果に比較しに来たノードが含まれているかチェック

という方向で作り替える必要があるかと思います。

--
suga ( ko.suga @ gmail.com )


2014-03-15 20:05 GMT+09:00 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>:
> 石上です。
>
> 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 mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user


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