6

ダウンロード時間を節約するために JavaScript を gzip 圧縮することについての言及を数多く見てきました。 ただし、特定のブラウザーがこれをサポートしていないという警告も多数表示されます。

私は2つの異なる方法を自由に使用できます。

  1. mod_deflateApache が htaccess を介して特定のディレクトリ内の JS/CSS ファイルを圧縮するようにするために使用します。
  2. ob_start('gzhandler')ファイルを圧縮し、正しいヘッダーでブラウザに返すために使用します。

方法 1 の問題点は、すべてのブラウザーが mod_deflate をサポートしているわけではないこと.htaccessです。これを調整するのに十分スマートなファイルを作成する方法がわかりません。

方法 2 の問題点は、ブラウザーが gzip されたスクリプトまたはスタイルシートをサポートしているかどうかを判断する方法について明確な答えがないことと、サポートしている場合、ヘッダーのコンテンツ タイプとしてどのような MIME タイプを指定する必要があるかということです。

アドバイスが必要です。まず、ブラウザでより広く受け入れられている方法はどれですか? 次に、いずれかの方法を使用して圧縮されていないバックアップ スクリプトを提供するにはどうすればよいですか? 第三に、<script src="js/lib.js.gz" type="text/javascript"></script>それ自体で機能しますか? (もちろん腐ることはありません。)

記録として、私は mod_deflate と完全な gzip 作成機能を備えた PHP5 を使用しており、doctype は xhtml strict です。また、JavaScript自体はYUIで圧縮されています。 編集: 戻って見たところ、Apache 1.3しかありません。私は2つ持っていると思っていたので、おそらく持っていないのにmod_deflateについて言及して申し訳ありません。

4

3 に答える 3

10

mod_deflateとphpのgzhandlerはどちらもzlibに基づいているため、その意味で、コンテンツの圧縮方法にブラウザーとの違いはほとんどありません。

最初の懸念に応えて、次のようにモジュール固有の.htaccess情報を設定できます。

<IfModule mod_deflate.c>
  # stuff
</IfModule>

2番目の懸念に応えて、PHPでのブラウザーサポートを検出できます。

if (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') ) {
  ob_start('ob_gzhandler');
  header("Content-Encoding: gzip");
// etc...
}

圧縮された.jsファイルと圧縮されていない.jsファイルのネゴシエーションを処理できるはずのテストされていない.htaccessがいくつかあります:(ソース

<FilesMatch "\\.js.gz$">
  ForceType text/javascript
  Header set Content-Encoding: gzip
</FilesMatch>
<FilesMatch "\\.js$">
  RewriteEngine On
  RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteCond %{REQUEST_FILENAME}.gz -f
  RewriteRule (.*)\.js$ $1\.js.gz [L]
  ForceType text/javascript
</FilesMatch>    
于 2008-10-09T17:04:53.590 に答える
2

ブラウザがヘッダーを適切に設定してAccept-Encodingいる場合、ブラウザが gzip をサポートできるかどうかを確認できるはずです。

Accept-Encoding: gzip,deflate
于 2008-10-09T17:18:11.117 に答える
1

これを実現する最良の方法は、サーバーがインラインgzipをサポートすることです。スクリプトタグのsrc属性の両方から「.gz」を削除し、ファイルを圧縮せずにサーバーに保存します。クライアントがサポートしている場合、サーバーはスクリプトをgzipでエンコードされた結果として自動的に送信します。これにより、サーバーに追加のCPUがいくらかかかりますが、ファイルはそれをサポートするクライアント用に圧縮されますが、古いクライアントは引き続き拡張バージョンを取得します。

apache2のmod_deflateを確認してください。mod_gzipは、Apache1.xと同等です。

于 2008-10-09T17:01:22.287 に答える