ホームページ  >  記事  >  バックエンド開発  >  Apache php gzip 圧縮出力を実装する方法

Apache php gzip 圧縮出力を実装する方法

WBOY
WBOYオリジナル
2016-07-29 09:14:52783ブラウズ

1. gzip の概要

gzip は GNU zip の略称で、GNU フリー ソフトウェアのファイル圧縮プログラムであり、ファイル形式 gzip を表すためによく使用されます。ソフトウェアの作者は Jean-loup Gailly と Mark Adler です。 1992 年 10 月 31 日に初めて公開されました。バージョン番号は 0.1 で、現在の安定バージョンは 1.2.4 です。

Gzip は主に Unix システムでのファイル圧縮に使用されます。 Linux では拡張子 .gz の付いたファイルをよく使用しますが、それらは GZIP 形式です。現在、インターネット上で使用される非常に一般的なデータ圧縮形式またはファイル形式になっています。 プレーン テキスト ファイルに Gzip 圧縮を適用すると、その効果は非常に明白で、ファイルの内容によっては、GZIP 圧縮後のページ サイズが元のサイズの 40% 以下になることがあります。

HTTPプロトコル上のGZIPエンコーディングは、WEBアプリケーションのパフォーマンスを向上させるために使用されるテクノロジーです。 Web 開発では、gzip を使用してページを圧縮し、Web サイトの トラフィック を削減できます。ただし、gzip による CPU 使用率の増加はわずか数パーセントですが、ページが 30 パーセント以上圧縮される可能性があります。 %なので、非常に費用対効果が高いです。

Apache の Gzip モジュールを使用すると、Gzip 圧縮アルゴリズムを使用して、Apache サーバーによって公開された Web ページのコンテンツを圧縮し、クライアントのブラウザに送信できます。この圧縮により、実際にネットワーク上で送信されるバイト数が削減されます (送信のためのネットワーク I/O が節約されます)。最も明白な利点は、Web ページの読み込みを高速化できることです。

Web ページの読み込みを高速化する利点は、トラフィックを節約し、ユーザーのブラウジング エクスペリエンスを向上させることに加えて、もう 1 つの潜在的な利点は、Gzip と検索エンジンのクロール ツールとの関係が改善されることです。たとえば、Google は、gzip ファイルを直接読み取ることで、通常の手動クロールよりも高速に Web ページをクロールできます。 Google ウェブマスター ツールでは、sitemap.xml.gz がサイトマップとして直接送信されていることがわかります。 そして、これらの利点は静的コンテンツに限定されません。PHP 動的ページやその他の動的に生成されたコンテンツは、

Apache

圧縮モジュールを使用して圧縮でき、他のパフォーマンス調整メカニズムや対応するサーバー側のキャッシュ ルールと組み合わせることで、大幅に改善できます。ウェブサイトのパフォーマンス。したがって、Linux サーバーにデプロイされた PHP プログラムの場合は、サーバーがサポートしている場合は Gzip Web 圧縮を有効にすることをお勧めします。

2. Web サーバー が HTTP 圧縮を処理するプロセスは次のとおりです。 1.

Web サーバー

がブラウザから HTTP リクエストを受信した後、ブラウザが HTTP 圧縮をサポートしているかどうかを確認します ( Accept-Encoding 情報 ; 要求されたファイルの最新の圧縮ファイルが既に存在します 4. 要求されたファイルの圧縮ファイルが存在しない場合、

Web サーバー

は、圧縮されていない要求されたファイルをブラウザーに返し、その圧縮ファイルを保存します。圧縮バッファ ディレクトリ内の要求されたファイルの内容。 5. 要求されたファイルの最新の圧縮ファイルが既に存在する場合、要求されたファイルの圧縮ファイルが直接返されます。

6. 要求されたファイルが動的ファイルの場合。 , Web サーバー はコンテンツを動的に圧縮してブラウザに返します。圧縮されたコンテンツは圧縮キャッシュ ディレクトリには保存されません。

3.

Apache

のgzip機能を有効にする Apacheでは圧縮にGzip圧縮アルゴリズムを使用するモジュールが2つあります:mod_gzipとmod_deflate。 Gzip Web 圧縮を使用するには、まずサーバーがこれら 2 つのコンポーネントのいずれかをサポートしていることを確認してください。 Gzip を使用するにはクライアント ブラウザのサポートも必要ですが、現在、IE、Mozilla Firefox、Opera、Chrome など、ほとんどのブラウザが Gzip をサポートしていますので、ご安心ください。 HTTP ヘッダーを調べることで、使用されているクライアント ブラウザーが gzip 圧縮をサポートしているかどうかをすぐに判断できます。送信された HTTP ヘッダーに次の情報が表示される場合は、ブラウザーが対応する gzip 圧縮をサポートしていることを意味します:

コードは次のとおりです: Accept-Encoding: gzip support mod_gzip Accept-Encoding: deflate support mod_deflate

Accept -エンコーディング: gzip、deflate は mod_gzip と mod_deflate の両方をサポートします


firebug として表示:

<span>Apache<br /> php gzip 圧縮出力の実装方法Accept-Encoding: gzip,deflate は mod_gzip と mod_deflate の両方をサポートします

サーバーが Gzip コンポーネントのサポートを有効にしている場合は、http.conf または .htaccess でカスタマイズできます。以下は .htaccess 設定の簡単な例です:

mod_gzip 設定:

code As以下:

# mod_gzip:

mod_gzip_on はい
mod_gzip_dechunk はい
mod_gzip_item_include ファイル (html?|txt|css|js|php|pl)$
mod _gzip_item_含むハンドラー ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip .*


mod_deflate 設定例:

OpenOpenApache設定ファイル httpd.conf

#LoadModule deflate_module モジュール/ mod_deflate.so 先頭の # 記号を削除します

コードは次のとおりです:


# mod_deflate:

DeflateCompressionLevel 6 #圧縮率、6 が推奨値です。 FLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilter ByType DEFL ATE アプリケーション/xml
AddOutputFilterByType DEFLATE アプリケーション/rss+ xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE image/svg+xml

里 PDF については、状況に応じて次のファイル MIME タイプを追加できます。 、写真、音楽ドキュメントなどはすでに高度に圧縮された形式であるため、圧縮を繰り返しても効果はほとんどなく、逆に CPU の処理時間が増加し、ブラウザのレンダリングの問題が発生する可能性があります。だから必要ないんだよ Gzip で再度圧縮します。上記の設定を行った後、返された HTTP ヘッダーを確認してください。以下の情報が表示されている場合は、返されたデータが圧縮されていることを意味します。つまり、Web サイト プログラムで設定された Gzip 圧縮が有効になります。

Content-Encoding: gzip
firebug ビュー:

<p>Apache</p> php gzip圧縮出力実装方法

<strong>注: </strong></p>1) mod_gzip を使用しても mod_deflate を使用しても、ここで返される情報は同じです。なぜなら、それらはすべて gzip 圧縮を実装しているからです。 <p></p>2) CompressionLevel 9 は、圧縮レベル (圧縮率の設定) を指します。値の範囲は 1 ~ 9 で、9 が最高レベルです。これにより、転送サイズが最大 80% (ファイルの内容に応じて) 削減され、少なくとも半分が節約できることがわかります。 CompressionLevel は、プロセッサのパフォーマンスと Web ページの圧縮品質のバランスを維持するために、デフォルトで 6 に設定できます。ただし、高いレベルに設定すると、圧縮率は高くなります。 <p>3) すでに圧縮されている jpg などの画像形式、mp3 などの音楽ファイル、zip などの圧縮ファイルについては、再度圧縮する必要はありません。 </p><p><br />4. mod_gzip と mod_deflate の主な違いは何ですか?どちらを使用するのが良いですか? </p><p><span> </span>最初の違いは、インストールされている </p>Apache<p> <span>Web サーバー<strong> のバージョンです: </strong><strong></strong> </span> </p>Apache<p> 1.x シリーズには Web ページ圧縮テクノロジが組み込まれていないため、圧縮を実行するための追加のサードパーティ mod_gzip モジュール。 <span><strong>Apache</strong> 2.x が正式に開発されたとき、Web ページの圧縮が考慮され、mod_gzip を置き換えるために mod_deflate モジュールが組み込まれました。どちらも Gzip 圧縮アルゴリズムを使用しますが、動作原理は似ています。 <span><strong></strong></span> </span>2 番目の違いは圧縮品質です: </p><p>F MOD_DEFLATE の圧縮速度はわずかに速く、MOD_GZIP の圧縮率はわずかに高くなります。一般に、デフォルトでは、mod_gzip は mod_deflate よりも 4% ~ 6% 高い圧縮率を実現します。 <p></p> では、なぜ mod_deflate を使用するのでしょうか? <p></p> mod_deflate
これは、サーバーのパフォーマンスを確保するために特別に使用される圧縮モジュール、mod_deflate
ファイルの圧縮に必要なリソースが少なくなります。これは、<p>トラフィック<span>の多いサーバーでは、mod_deflate を使用した方が mod_gzip よりも高速にロードされる可能性があることを意味します。 </span></p>
わからない?つまり、Web サイトの 1 日あたりのユニーク訪問者数が 1,000 人未満で、Web ページの読み込みを高速化したい場合は、mod_gzip を使用してください。追加のサーバー リソースを消費しますが、
でも、その価値はある。 Web サイトに 1 日あたり 1,000 人を超えるユニーク訪問者がいて、割り当てられたシステム リソースが限られた共有仮想ホストを使用している場合は、mod_deflate を使用します。
より良い選択となるでしょう。 <p><strong> さらに、</strong>Apache</p> 2.0.45 以降、mod_deflate は DeflateCompressionLevel を使用できるようになりました。
圧縮レベルを設定するディレクティブ。このディレクティブの値は、1 (最も速い圧縮、最も低い圧縮品質) から 9 (最も遅い圧縮、最も高い圧縮率) までの整数です。デフォルト値は 6 (圧縮速度と圧縮品質) です。
 よりバランスの取れた値)。この単純な変更により、mod_deflate は mod_gzip の圧縮と簡単に比較できるようになります。 <p></p>追記:上記の 2 つの Gzip モジュールが有効になっていない仮想空間では、PHP の zlib 関数ライブラリを使用してファイルを圧縮することもできますが、この方法は使用するのがより面倒です。また、一般的にサーバーリソースを消費しますので、状況に応じて注意してご利用ください。 <p><strong></strong>5. zlib.output_compression および ob_gzhandler エンコーディング メソッドによる圧縮 </p><p></p> サーバーは mod_gzip および mod_deflate モジュールをサポートしていません。GZIP を通じて Web ページのコンテンツを圧縮したい場合は、<p>zlib.output_compression をオンにする 2 つの方法を検討できます。または <span>ob_g​​zhandler エンコーディングを使用します。 </span></p> 1) zlib.output_compression は、Web コンテンツを圧縮しながらクライアントにデータを送信します。 <p><span> 2) ob_gzhandler は、Web ページのコンテンツが圧縮されるのを待ってから送信します。比較すると、前者の方が効率的ですが、2 つは同時に使用できず、1 つしか選択できないことに注意してください。エラーが発生します。この 2 つの実装方法を簡単に説明します。 <span></span></span> 1. ZLib.output_compression 実装方法 </p><p></p><p> デフォルトでは、zlib.output_compression は閉じられています: </p><p> コードは次のとおりです: </p><p><span>; library <br /> ; このオプションの有効な値は、「off」、「on」、または圧縮に使用される特定のバッファ サイズです </span> ; 注: 結果のチャンク サイズは圧縮の性質により異なる場合があります。 . PHP ; </p> ; パフォーマンスを向上させるために、それぞれ数百バイトのチャンクを出力します。 注: zlib.output_handler を使用する必要があります。標準の <p> ; そうしないと、出力が破損します </p> ; http://php.net/zlib.output_compression = Off <p> ; -compression -Level</p>; Zlib.Output_Compression_Level = -1<p><br /><br /><br /><br /><br /><br /><br /><br /><br />有効にする場合は、php.iniファイルを編集して次のコンテンツを追加します。 <br /> コードは次のとおりです: <br /><br /><br /> zlib.output_compression = On </p> zlib.output_compression_level = 6 <p><span><span><span><span><span><span><span><br /><br /> phpinfo() 関数を通じて結果を検出できます。 </span></span></span></span></span></span></span></p><p>
Value と MasterValue の値が両方とも On の場合、この時点でアクセスした PHP ページ (疑似静的ページを含む) が Firebug または GZIP 圧縮されていることを意味します。
オンライン Web ページの GZIP 圧縮検出ツールは、圧縮効果を検出できます。 </p>2. ob_gzhandler の実装方法<p><p> ob_gzhandler を使用する必要がある場合は、zlib.output_compression をオフにして、php.ini ファイルの内容を次のように変更する必要があります。 <br /> zlib.output_compression = Off <br /> zlib.output_compression_level = -1 <br /> 関連するコードを挿入して GZIP 圧縮を実装するPHP ファイル: </p><p> コードは次のとおりです: </p><p><br /> if (extension_loaded('zlib')) { <br /> if ( !headers_sent() AND isset($_SERVER['HTTP_ACCEPT_ENCODING']) && <br /> strpos($_SERVER[ 'HTTP_ACCEPT_ENCODING']、'gzip ') !== FALSE) <br /> <br /> echo $context; <br /><br /> <br /><br /><br /><br /></p><p><span><span> zlib.output_compression であっても ob_gzhandler であっても、実行できるのはPHP ファイルの GZIP 圧縮は、PHP を呼び出すことによってのみ実装できます。
<span><span><span><span><span><br /></span></span></span></span> 最後に言いたいのは、現在主流のブラウザは基本的に HTTP1.1 プロトコルを使用しているということです。
IE の場合、メニュー バーの [ツール] - [インターネット オプション] - [詳細設定] - [HTTP 1.1 設定] - [HTTP を使用] を選択しない場合は、すべて GZIP 圧縮をサポートします。
1.1 では、Web ページ圧縮後の速度向上によってもたらされる喜びを感じることはできません。 </span></span>
                
                
                </span>
                    以上、Apache phpのgzip圧縮出力の実装方法を内容も含めて紹介しましたので、PHPチュートリアルに興味のある方の参考になれば幸いです。 </p>
                <p>
                    <span>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。