以前 apache wicket で
ビルド時に
こちらを
実施の モチベーション
- 作成中の
アプリケーション由来
Apache Wicket には、Htmlcompressor · wicketstuff/core Wiki と いう liblary が あり、 アプリケーション内で、 画面描画の 前に htmlの 圧縮を 実施する ことができます。
しかし、リクエストの たびに 圧縮を 実施する ため、 CPU負荷は かかります。
このため、 事前圧縮して 描画直前での 圧縮は 実施しないようにしたいと 思いました。
参考
pom.xml へ 定義の 追加
build の
maven repository 上 1.3 が
Maven HTMLCompressor Plugin - javalibs の
- pom.xmlの
抜粋 <plugin> <groupId>com.tunyk.mvn.plugins.htmlcompressor</groupId> <artifactId>htmlcompressor-maven-plugin</artifactId> <version>1.3</version> <executions> <execution> <id>compress-html</id> <phase>prepare-package</phase> <goals> <goal>html</goal> </goals> <configuration> <srcFolder>${basedir}/src/main/java</srcFolder> <fileExt> <ext>html</ext> </fileExt> </configuration> </execution> </executions> </plugin>
html の 配置先に ついて
defalut では、${basedir}/src/main/resources
が
Apache Wicket は、<srcfolder >${basedir}/src/main/java</srcfolder>
と
pom 追加後の mvn clean package の 実行結果
以下、
template の
INFO] --- htmlcompressor-maven-plugin:1.3:html (compress-html) @ festivals4partypeople-web --- [INFO] Compressing /Users/xxxxxxxxxx/Bitbucket/festivals4partypeople_java/festivals4partypeople-web/src/main/java [INFO] HTML compression statistics: +-----------------------------+-----------------------------+-----------------------------+ | Category | Original | Compressed | +-----------------------------+-----------------------------+-----------------------------+ | Filesize | 3.8 kB | 1.4 kB | | Empty Chars | 2022 | 112 | | Script Size | 0 B | 0 B | | Style Size | 0 B | 0 B | | Event Handler Size | 0 B | 0 B | +-----------------------------+-----------------------------+-----------------------------+ | Time: 00:00:00, Preserved: 0 B, Compression Ratio: 0.37, Savings: 62.84% | +-----------------------------+-----------------------------+-----------------------------+ [INFO] HTML compression completed.
設定値
pom.xml に
xml の
基本的に
プログラムを
[Configuration · alextunyk/htmlcompressor-maven-plugin Wiki]
構わず
設定値 | 説明 | Default値 |
---|---|---|
htmlCompressionStatistics | コンプレッサーが圧縮した結果 txt ファイルの出力パス | ${project.build.directory}/htmlcompressor/html-compression-statistics.txt |
fileExt | 処理対象とするファイルの拡張子 配列 | htm,html |
enabled | 圧縮可否を切り替える | true |
removeComments | コメントを削除可否を切り替える | true |
removeMultiSpaces | 連続する改行を削除するか否か | true |
removeIntertagSpaces | タグ内のスペースを除去するか否か? | false |
removeQuotes | 不要なタグ属性引用符を削除するか否か | false |
simpleDoctype | Document type をシンプルにするか否か | false |
removeScriptAttributes | script タグのオプション属性を削除するか否か | false |
removeStyleAttributes | style タグのオプション属性を削除するか否か | false |
removeFormAttributes | form タグのオプション属性を削除するか否か | false |
removeInputAttributes | input タグのオプション属性を削除するか否か | false |
simpleBooleanAttributes | boolean 値で表すことのできる属性を削除するか否か | false |
removeJavaScriptProtocol | eventhandler から、"javascript:" プロトコル記述を削除するか否か | false |
removeHttpProtocol | タグ属性の中に記述されている"http://" を "//" に置換するか否か | false |
removeHttpsProtocol | タグ属性の中に記述されている"https://" を "//" に置換するか否か | false |
compressCss | インラインcssを圧縮するか否か | false |
preserveLineBreaks | オリジナルHTMLファイルの改行を保持するか否か | false |
yuiCssLineBreak | Yahoo YUI Compressor の --line-break に指定する値 | -1 (改行しない) |
compressJavaScript | インラインjavascriptを圧縮するか否か | false |
jsCompressor | javascriptコンプレッサーとして"yui" 、"closure" のどちらを使用するか | "yui" |
yuiJsNoMunge | "yui" に --nomunge を指定するか否か | "false" (指定しない) デフォルトはインラインjavascriptはoffなので発動しない |
yuiJsPreserveAllSemiColons | "yui" に --preserve-semi を指定するか否か | "false" (指定しない) |
yuiJsLineBreak | "yui" に指定する--line-break の値 | -1 改行しない |
closureOptLevel | "closure" に指定するclosureOptLevel の値 | "simple" |
yuiJsDisableOptimizations | "yui" の--disable-optimizations を指定するか否か | “false “ |
predefinedPreservePatterns | 圧縮対象外にする?タグのパターンPHP_TAG_PATTERN 、SERVER_SCRIPT_TAG_PATTERN | null |
preservePatterns | 圧縮対象外にする文字列を正規表現で指定 | null |
preservePatternFiles | 圧縮対象外にする文字列をファイルで指定(配列) | null |
generateStatistics | 圧縮結果の統計情報を出力するか否か | true |
srcFolder | 圧縮対象のファイル格納先を指定する | ${basedir}/src/main/resources |
targetFolder | 圧縮後のファイル格納先を指定する | ${project.build.directory}/classes |
javascriptHtmlSprite | 圧縮されたすべてのhtmlファイルをjsonオブジェクトとして含むjavascriptファイルを作成するか否か | true |
javascriptHtmlSpriteIntegrationFile | 圧縮されたすべてのhtmlファイルをjsonオブジェクトとして含むjavascriptファイルのファイル名 | "${basedir}/src/main/resources/html/integration.js" |
javascriptHtmlSpriteTargetFile | 圧縮されたhtmlファイルをjsonオブジェクトとして使用する、JavaScriptスプライトファイル名 | "${project.build.directory}/htmlcompressor/html/integration.js" |
encoding | 作成、読み込むファイルのエンコーディング指定 | "utf-8" |
closureCustomExternsOnly | 既定の組み込みクロージャーエクスターナルを無効にする | false |
closureExterns | クロージャーエクスターナルの指定 | null |
想像以上に
設定を 踏まえてpom.xmlを 修正
設定値を
インラインcss、
- pom.xmlの
抜粋 <plugin> <groupId>com.tunyk.mvn.plugins.htmlcompressor</groupId> <artifactId>htmlcompressor-maven-plugin</artifactId> <version>1.3</version> <executions> <execution> <id>compress-html</id> <phase>prepare-package</phase> <goals> <goal>html</goal> </goals> <configuration> <srcFolder>${basedir}/src/main/java</srcFolder> <fileExt> <ext>html</ext> </fileExt> <compressCss>true</compressCss> <compressJavaScript>true</compressJavaScript> </configuration> </execution> </executions> </plugin>
minify-maven-plugin だけでも 実施できそう
minify-maven-plugin でも
こちら
も
javascript - minify-maven-plugin minifying html and xml files also - Stack Overflow
まとめ
Minify Maven Plugin - Introduction を
以下まとめます。
古いpluginだが、
依存ライブラリも 古く、 十分枯れていると 考えられる。
メンテナンスはそれほど 行われていないかもしれませんが、 歴史の ある ライブラリに 処理を 委譲しているだけなので、 それなりに 安定していると 思います。 これから、
新規作成する システムには 不要かもしれない。
個人的な見解、 そして、 疑問点でもありますが、 新たに 構築する システム、 サービスでは、 使う 機会が ないのかもしれません。
Javaのサーバー側主体(主導)で、 htmlテンプレートを 抱える 仕組みが 続くのかと いうと、 直近の 状況では NOかなと 思います。 *今まで、
作ってきた ものの 寿命引き伸ばしには 使える *
レガシー?な
モダーンな
- 古いとかいっていて、
yui compressorの 完成度が すごい
設定値の具合とか 見ていると、 熟考の 末、 作られた ものだと 思います。
設定が細かい、 且つ、 納得する。 デフォルトは false
の設定は 長いこと 使った 挙句の HTMLの 仕様の 変化の 影響は 受けなくはなさそうなので、 false
にして おくのが 吉かと 思います。
以上です。
コメント