[mayaa-user:1011] ビルド時にClassLoaderSourceDescriptor.prepareURL()の処理時間が高騰してしまいました

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2014年 2月 12日 (水) 18:19:49 JST


石上です。

いつもお世話になっております。

VisualVMのサンプラーを使用してMayaaテンプレートビルド時の処理時間を計測をしたところ、
次の箇所での処理時間の99%を占めていることがわかりました。
org.seasar.mayaa.impl.util.IOUtil.getResource()

呼び出し元は
org.seasar.mayaa.impl.source.ClassLoaderSourceDescriptor.prepareURL()
となっていて、

この中で
        if (_url == null) {
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            _url = IOUtil.getResource(path, loader);
        }
と言う箇所があり、
IOUtil.getResource(path, loader);
がnullの場合、このロジックに何回も突入してしまうのではないかと思われます。
ここでIOUtil.getResourceがnullだった時と、まだIOUtil.getResourceを実行していない
nullの状態を判断できるようにすれば効率化出来るのかもしれません。

私のアプリケーションではPageSourceDescriptorもクラスローダーもカスタマイズしていますので、
通常の使い方ではこんなにパフォーマンスのボトルネックにならないのかもしれません。
私は、ClassLoader内にテンプレートやmayaaファイルを格納する使い方は
していませんので、
ClassLoaderSourceDescriptor
をPageSourceDescriptorから取り除かれるように設定できませんでしょうか?

見たところ、PageSourceDescriptor.collectSourceDescriptor()で
ClassLoaderSourceDescriptorをnewで生成してしまっていますので
現状では設定により外すことはできないように思われます。

ClassLoaderSourceDescriptor.prepareURL
や
IOUtil.getResource()
の効率化が可能でしたらご検討頂ければと思います。


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