82 空白と圧縮の理解

WebCenter Sitesでテキスト・ページがストリームされると、かなりの量の空白(スペース、改行およびタブ)がページに含まれることがあります。この空白は、クライアントで消費されたデータには影響しません。ソース・コードがコンシューマに表示されるときに空白が可視状態になります。さらに、過剰な空白はレスポンスのサイズを不必要に増加し、これが最終的に帯域幅の使用を増加します。そのため、可能なかぎり空白を削除することをお薦めします。

トピック:

空白とJSP

JSP仕様では、空白を保持する必要があります。

したがって次のようなページの場合

<%@ page import="my class name"%> 
<%@ page import="my class 2"%> 
<cs:ftcs> 
<p>Hello world!</p> 
</cs:ftcs>

JSPの解析後、3行目にテキストが表示されるため、改行が3つと<p>の前のタブが1つあります。さらに複雑なページでは、問題は複雑になります。

空白とXML

WebCenter SitesのXML処理言語は、独自のXML対応タグのセットであり、JSPの空白保持ルールにこだわりません。

このため、次のようなWebCenter Sites XMLページの場合

<? XML version 1.0 ?> 
<FTCS> 
<p>Hello World!</p> 
</FTCS>

出力の最初の文字として<p>が表示されます。なぜなら、XMLパーサーによって空白がすべて取り除かれるからです。(例外は、XMLデバッグが有効である場合です。この場合、空白がすべて保持されます。)

圧縮

空白は、正しく書式設定されたコードの記述のアーティファクトです。その存在は、開発者のためになるプログラミング手法の副作用です。コンシューマとカスタマへの影響は、帯域幅を除いて最小です。帯域幅の問題を解消するために、すべてのテキストベースのページの出力を圧縮できます。出力を圧縮するには、サーバー側にいる必要があります。コンシューマのユーザー・エージェント(ブラウザ)によって解凍が実行されます。

圧縮/解凍は、エンド・ユーザーには完全に透過的に実行されます。この種の圧縮は、帯域幅の使用量を最大80%削減できます。

一般に使用されている圧縮メカニズムの1つに、Apache Webサーバーのmod-gzip拡張機能があります。このモジュールは、ユーザー・エージェントで解凍可能であれば、ユーザー・エージェントに対するすべての出力を自動的にgzipします。構成は最小であり、その有効性は非常に高いです。これは、SourceForge (http://sourceforge.net/projects/mod-gzip/)から取得できます。類似したツールを、IISなどのその他の一般的なWebサーバーで入手できます。

また、アプリケーション・サーバー・レイヤーでの圧縮を実行し、Webサーバーはそのままにしておくことも可能です。この操作を実行するには、標準サーブレット・フィルタをSatellite Server (またはSatellite Serverが使用されない場合にはWebCenter Sites)に接続します。このサーブレット・フィルタは、指定されたサーブレットの起動の前または後(またはその両方)に所定の順序で起動され、起動中に、mod-gzipの仕組みとまったく同じ方法で、出力を互換性のあるUser-Agentに送信する前に圧縮できます。このような圧縮フィルタは、SourceForge (http://sourceforge.net/projects/pjl-comp-filter/)で検索できます。

圧縮に支援が必要な場合には、Oracleコンサルティング・サービスにお問い合せください。

JSPの設計

圧縮がオプションでない場合には、空白が発生しない方法でJSPページを変更することを検討します。

これを実行するには、前述のコードを次のように変更します。

<%@ page import="my class name" 
%><%@ page import="my class 2" 
%><cs:ftcs><p>Hello world!</p></cs:ftcs>

これは簡潔ではありません(または読みやすくもありません)が、<p>タグの前にいかなる空白も含まれていないページが出力されます。中間の解決策として、次のようなものが考えられます。

<%@ page import="my class name" 
%><%@ page import="my class 2" 
%><cs:ftcs> 
<p>Hello world!</p>
</cs:ftcs>

JSPの空白問題の対処法に関する例の詳細は、ElementCatalogのWebServicesエレメントを参照してください。それらは、WebCenter Sitesに含まれています。