Spring Boot 1.2.5のcache bustingを有効にすると、html生成のパフォーマンスがかなり劣化します。
具体的には以下の環境です。
小さめのコードをGitHubに挙げました。
https://github.com/af-not-found/SpringUrlEncPrefIssue
Thymeleafで5000個のリンクを生成しています。jvisualvmによるプロファイル結果を以下に掲載します。
赤枠の約1000msが劣化分です。
executable JARの場合、6秒以上も余計にかかっています。めっちゃ遅い。
プロファイル結果の通り、リンク毎に以下の処理が実行されるためです。
Spring Boot 1.3.0 M5(Spring Framework 4.2.0)では再現しませんでした。色々調べたんですが、何がきっかけで修正されたのかは分かりませんでした。
2015/11/18 追記
Spring Boot 1.3.0 の正式版で、パフォーマンスの劣化が再現しました。状況確認中です。
1.3がリリースされるまでは、GitHubにあげたCachingResourceUrlEncodingFilterのように、フィルタリングとキャッシュの仕組みを導入して対処する方法があります。
WebConfig.javaでは、javaコマンドラインに -Dfast=true
を追加するとCachingResourceUrlEncodingFilterが有効になるよう実装しました。
// my implementation
String fast = System.getProperty("fast");
if (fast != null && fast.equals("true")) {
logger.info("using CachingResourceUrlEncodingFilter");
return new CachingResourceUrlEncodingFilter("/static/");
}
// original implementation
else {
logger.info("using ResourceUrlEncodingFilter");
return new ResourceUrlEncodingFilter();
}
コンストラクタにresolve対象URLのprefixを設定しています。
はい。改善されました。