以前、django で html を圧縮する plugin を使ってみましたが、
Wicket でも 同様のことが実施できるか調べたところ、
Htmlcompressor · wicketstuff/core Wiki
という ライブラリがありましたので、使ってみた結果を記載します。
前提
- Wicket version
7.6.0です。
<dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-core</artifactId> <version>7.6.0</version> </dependency>
参考
-
django で html を圧縮する
mezzanine django-htmlmin を使ってhtmlを圧縮する | Monotalk -
PageSpeed Insights の リソース圧縮の説明
リソース(HTML、CSS、JavaScript)を圧縮する | PageSpeed Insights | Google Developers -
HTML圧縮に対しての記事
HTMLは圧縮(compressやminify)すべきか | mtdew2 -
htmlcompressor の紹介
サイズが大きくなりがちなHTMLソースをコンパクトに·htmlcompressor MOONGIFT
WicketStuff の HTML Compresor を使う
WicketStuffのwiki に記載がある通りなのですが、
以下、設定、実装の追加で、HTML が圧縮されるようになります。
pom.xml に dependency を追加する
<!-- https://mvnrepository.com/artifact/org.wicketstuff/wicketstuff-htmlcompressor -->
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-htmlcompressor</artifactId>
<version>7.6.0</version>
</dependency>
Application クラス内で、HtmlCompressingMarkupFactory を設定する
getMarkupSettings().setMarkupFactory(new HtmlCompressingMarkupFactory());
表示されるHTML
圧縮前、圧縮後のHTMLの記述は以下の通りです。
改行、空白が除去されています。
- 圧縮前
<a class="btn btn-default btn-block" wicket:id="festivalLink" href="./festivals/340;jsessionid=node11ulekm8c1r1rv11yflsuplsery.node1">
<span wicket:id="festivalName">BOUNCE UP -3rd Anniversary-</span>
</a>
- 圧縮後
<a class="btn btn-default btn-block" wicket:id="festivalLink" href="./festivals/340;jsessionid=node11ulekm8c1r1rv11yflsuplsery.node1">
<span wicket:id="festivalName">BOUNCE UP -3rd Anniversary-</span></a>
Compresorの設定をカスタマイズして使用する
HtmlCompressingMarkupFactory 内では、com.googlecode.htmlcompressor.compressor.HtmlCompressor
を使って HTMLの圧縮を行っています。
コンストラクタ内の記述は、以下の通りです。
public HtmlCompressingMarkupFactory(HtmlCompressor compressor) {
if(compressor == null) {
compressor = new HtmlCompressor();
compressor.setRemoveIntertagSpaces(true);
compressor.setRemoveSurroundingSpaces("html,head,body,br,p");
}
this.compressor = compressor;
}
HtmlCompressingMarkupFactory のコンストラクタに独自設定した HtmlCompressor を渡せるので、
以下の通り、HtmlCompressorの設定を行いました。
pom.xml に、HtmlCompressor の dependency を 追加
アプリケーションのpom.xmlにcom.googlecode.htmlcompressor
の依存関係を追加します。1
[1] 2011年とか、少し昔に作られたライブラリですね。
<!-- https://mvnrepository.com/artifact/com.googlecode.htmlcompressor/htmlcompressor -->
<dependency>
<groupId>com.googlecode.htmlcompressor</groupId>
<artifactId>htmlcompressor</artifactId>
<version>1.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.yahoo.platform.yui/yuicompressor -->
<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>2.4.8</version>
</dependency>
アプリケーション内で、HtmlCompressorのインスタンスを生成する
WhiteTrashLord/htmlcompressor: HTML Compressor and Minifier, Backup of code.google.com/p/htmlcompressor
を参考に以下の通りインスタンス生成、設定を行いました。
getMarkupSettings().setMarkupFactory(new HtmlCompressingMarkupFactory(newHtmlCompressor));
- newHtmlCompressor メソッド
private HtmlCompressor newHtmlCompressor() {
HtmlCompressor compressor = new HtmlCompressor();
// 圧縮を実行する(true)、しない (false) デフォルト true
compressor.setEnabled(true);
// コメントを除去する(true)、しない(false) デフォルト true
compressor.setRemoveComments(true);
// 複数スペースを削除する(true)、しない(false) デフォルト true
compressor.setRemoveMultiSpaces(true);
// タグ間のスペースを削除する(true)、しない(false)
compressor.setRemoveIntertagSpaces(true);
// タグの不要な引用符を削除する 削除する(true)、しない(false) デフォルト false
compressor.setRemoveQuotes(true);
// DOCUMENTタイプをシンプルにする(true)、しない(false) デフォルト false
// <!DOCTYPE html> に変換されます
compressor.setSimpleDoctype(false);
// ------------------------
// script タグから、オプション属性を削除します 削除する true 削除しない false デフォルト false
// protected static final Pattern jsTypeAttrPattern = Pattern.compile("(<script[^>]*)type\\s*=\\s*([\"\']*)(?:text|application)/javascript\\2([^>]*>)", 34);
// protected static final Pattern jsLangAttrPattern = Pattern.compile("(<script[^>]*)language\\s*=\\s*([\"\']*)javascript\\2([^>]*>)", 34);
// ---------
compressor.setRemoveScriptAttributes(false);
// style タグからオプション属性を削除します。 削除する true 削除しない false デフォルト false
// protected static final Pattern styleTypeAttrPattern = Pattern.compile("(<style[^>]*)type\\s*=\\s*([\"\']*)text/style\\2([^>]*>)", 34);
compressor.setRemoveStyleAttributes(false);
// link タグからオプション属性を削除します。 削除する true 削除しない false デフォルト false
// protected static final Pattern linkTypeAttrPattern = Pattern.compile("(<link[^>]*)type\\s*=\\s*([\"\']*)text/(?:css|plain)\\2([^>]*>)", 34);
// protected static final Pattern linkRelAttrPattern = Pattern.compile("<link(?:[^>]*)rel\\s*=\\s*([\"\']*)(?:alternate\\s+)?stylesheet\\1(?:[^>]*)>", 34);
compressor.setRemoveLinkAttributes(false);
// Form タグからオプション属性を削除します。 削除する true 削除しない false デフォルト false
// protected static final Pattern formMethodAttrPattern = Pattern.compile("(<form[^>]*)method\\s*=\\s*([\"\']*)get\\2([^>]*>)", 34);
compressor.setRemoveFormAttributes(false);
// Input タグからオプション属性を削除します。 削除する true 削除しない false デフォルト false
// protected static final Pattern inputTypeAttrPattern = Pattern.compile("(<input[^>]*)type\\s*=\\s*([\"\']*)text\\2([^>]*>)", 34);
compressor.setRemoveInputAttributes(false);
// Boolean 値を 属性から削除します。削除する true 削除しない false デフォルト false
// protected static final Pattern booleanAttrPattern = Pattern.compile("(<\\w+[^>]*)(checked|selected|disabled|readonly)\\s*=\\s*([\"\']*)\\w*\\3([^>]*>)", 34);
compressor.setSimpleBooleanAttributes(false);
// インライン イベントハンドラから "javscript:"の記述を削除します。削除する true 削除しない false デフォルト false
compressor.setRemoveJavaScriptProtocol(false);
// link タグなどの"http://" 記述を "//"に置換します。
compressor.setRemoveHttpProtocol(false);
// link タグなどの"https://" 記述を "//"に置換します。
compressor.setRemoveHttpsProtocol(true);
// 改行を除去しない 除去しない true 除去する false デフォルト false
compressor.setPreserveLineBreaks(false);
// 周囲のスペースを削除するタグ カンマ区切りで設定する デフォルト Null
compressor.setRemoveSurroundingSpaces(HtmlCompressor.BLOCK_TAGS_MAX);
// インラインcss を圧縮する 圧縮する true 圧縮しない false デフォルト false
compressor.setCompressCss(true);
// YUI cssコンプレッサーの改行を入れる文字数 -1 で改行しない
compressor.setYuiCssLineBreak(-1);
// インラインJavascript を圧縮する 圧縮する true 圧縮しない false デフォルト false
compressor.setCompressJavaScript(true);
// Yahoo YUI Compressorのdisable-optimizations の設定 標準で実装されている最適化を無効するか パラメータ を設定するか 無効する true 無効にしない false
compressor.setYuiJsDisableOptimizations(false);
// YUI コンプレッサーの改行を入れる文字数 -1 で改行しない
compressor.setYuiJsLineBreak(-1);
// nomunge パラメータ (最小化のみで、難読化はしない) を 設定するか 設定する true 設定しない false デフォルト false
compressor.setYuiJsNoMunge(false);
// 不要なセミコロンを削除しないようにする 削除しない true 、 削除する false
compressor.setYuiJsPreserveAllSemiColons(false);//--preserve-semi param for Yahoo YUI Compressor
// ---------------------------------------------------
// 独自のjs、css コンプレッサーを用いる場合は使用する
// ----------------------------------
//use Google Closure Compiler for javascript compression
// compressor.setJavaScriptCompressor(new ClosureJavaScriptCompressor(CompilationLevel.SIMPLE_OPTIMIZATIONS));
//use your own implementation of css comressor
// compressor.setCssCompressor(new MyOwnCssCompressor());
return compressor;
}
結構色々な設定ができて、エンタープライズで設定するには少し迷いますが、 デフォルトでただ使うこと自体は簡単にできるので、とりあえず導入はいいかもしれません。 以上です。
コメント