Apacheのmod_deflateを使用してWebページを高速化する
WebアプリケーションがHTTP Server (Powered by Apache) for i上で稼働している場合は、強力なApache拡張機能であるmod_deflateを有効化してサイトを高速化することができます。PC上でファイルを圧縮することで容量を節約でき、ファイル転送を高速化できるのと同じように、mod_deflateは「サーバーからの出力を、ネットワークを通してクライアントに送る前に圧縮することを可能にします」(詳細については、https://httpd.apache.org/docs/2.4/mod/mod_deflate.htmlを参照してください)。筆者が行ったテストでは、10~50%のスピード向上が見られました。
圧縮できるのは、HTML(プレーンなhtmlファイル、RPG CGIプログラムからの出力、PHP、またはその他の言語のいずれでも)、カスケーディング スタイル シート(CSS)、およびJavascript(JS)を含む、あらゆるテキスト ベースの出力です。つまり、圧縮画像およびその他のバイナリ フォーマット以外のほとんど何でも、ということになります。
コンテンツは自動的に圧縮され、通常通りにネットワークを通してブラウザへ送信され、その後、ユーザーのブラウザによって自動的に展開されます。デフォルトでは、gzip圧縮プロトコルが使用されます。ほとんどのブラウザがサポートしているためです。
mod_deflateを有効化するには、簡単な以下の手順に従います。
- 適切なApacheインスタンス構成ファイルを編集します。ファイルの場所は、Webサーバー インスタンスの名前によって異なります。たとえば、Apacheインスタンスの名前がGURUである場合、ファイルの場所は、/www/guru/conf/httpd.confとなります。このファイルはシンプルなテキスト ファイルであるため、IBMのHTTP Server Admin GUI(2001番ポート)(*ADMINが開始されている場合)、WRKLNK/EDTFコマンド、または使い慣れたテキスト エディターなどを使用して編集することができます。
- httpd.confのメイン セクションに、次の2つのディレクティブを追加します(ナンバー記号の行はコメントです)。
- TCP/IPサーバーの開始(STRTCPSVR)CLコマンドを使用して、Apacheインスタンス(この例では「GURU」)を再起動します。
# Load the extension that deflates (compresses) content
LoadModule deflate_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
# Specify what content to compress (example: html, json, css, javascript)
# Make sure this directive has no line breaks; it should fit on one line in your .conf
file.
AddOutputFilterByType DEFLATE application/x-httpd-php application/json text/css
application/x-javascript application/javascript text/html
STRTCPSVR SERVER(*HTTP) RESTART(*HTTP) HTTPSVR(GURU)
サイトがパブリック サイトである場合、https://checkgzipcompression.com/のボックスにサイトのURLを入力すると、圧縮が有効化されたかどうか、どれくらい帯域幅が節約されたか確認することができます。筆者のサイト(seidengroup.com)をテストしたところ、確かに圧縮が有効化されており、ページ サイズが73,911バイトから15,171バイトへ減少し、かなりの節減になったことを確認できました。
サイトがパブリック サイトでない場合は、ブラウザの「デベロッパー ツール」を使用して圧縮を確認することができます。Google Chromeブラウザでの操作手順は、 https://www.conetix.com.au/support/article/how-to-check-gzip-is-enabledに記載されています。
目端の利く開発者なら、動的に圧縮/展開を行うことで、何らかのパフォーマンスの低下が引き起こされるのではないかと疑問を抱くかもしれません。筆者の経験上、オンザフライの圧縮/展開から多少のスローダウンが生じるとしても、ファイル サイズが小さくなるメリットの方がはるかに大きいと思われます。圧縮アルゴリズムは、非常に高速になるように何年もかけて機能の向上が図られてきました。 ですから、あれこれ考える前に、まずは圧縮を実際に行ってみることをお勧めします。
ご自分のIBM iベースのサイト(およびその他のサイト)でmod_deflateを試したら、その結果をこちらまでお知らせください。
IBM Championにして、 Seiden Groupの創設者であるAlan Seiden氏は、オープンソース、PHP、およびIBM iビジネス ロジックを使用してクライアントがAPIおよびWeb/モバイル アプリケーションを構築するのを指導する業務を行っています。自身のIBM iコミュニティへの熱い想いに促される形でAlan氏は、年2回開催される CIO Summitを主催するとともに、PHP on IBM iの技術情報を記載した無償の ニュースレターの配信を毎月行っています。