今の案件では海外からのアクセスもあるとのことで、通信のgzip圧縮入れた検証とかしようと思ってるのですが、そもそもどういう選択肢があるのか意外と知らなかったり…。
多分一番簡単なのは、フロント側のWebサーバ(ApacheやNginx)で設定する方法なのだと思います。
うちではイントラでユーザ数があまり多くない場合、フロント立てずに直接アプリケーションサーバ利用もあるのですが、GlassFishについて調べたらCompressionの設定がありました。
以下のCompressionをonかforceにして、Mime Typesも必要に応じてtext/javascriptなど追加したり、圧縮する最低ラインを設定できたりするようです。
ちょっと試してみたのですが、なんかうまくできなかった…orz
Stack Overflowのこの辺りも似た感じなのかなぁと(ここの話はcacheだけ?)
stackoverflow.com
で、もう1つ海外で結構引っかかったのは先日ブログでも紹介したOmniFacesを利用するというものでした。
kikutaro777.hatenablog.com
GzipResponseFilterという便利フィルタが用意されています。
GzipResponseFilter - OmniFaces Showcase
設定はweb.xmlに以下を追加するだけでした。
<filter>
<filter-name>gzipResponseFilter</filter-name>
<filter-class>org.omnifaces.filter.GzipResponseFilter</filter-class>
<init-param>
<description>圧縮かける閾値のバイト。0から9999が指定可能で、デフォは500。</description>
<param-name>threshold</param-name>
<param-value>500</param-value>
</init-param>
<init-param>
<description>MIME TYPEの指定</description>
<param-name>mimetypes</param-name>
<param-value>
text/plain, text/html, text/xml, text/css, text/javascript, text/csv, text/rtf,
application/xml, application/xhtml+xml, application/javascript, application/json
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>gzipResponseFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
Filterの適用前後を比べてみると次のような感じに。
gzip圧縮なし
gzip圧縮あり
以下辺りを参考に確認できるサイトでもみてみました。
syncer.jp
web-marketing.zako.org
計測した画面はPrimeFacesのコンポーネントを結構多く使ってる画面だったのですが、結構圧縮されるものだなぁと。
実際の効果や、逆にオーバーヘッドとかも気になるけど、とりあえずこれでいこうかなぁ…。