10

gzipまたはdeflateを使用して、非常に大きなhtml / xml / jsonファイル(大きなデータダンプ)を事前に圧縮する必要があります。圧縮せずにファイルを提供したくありません。それらは非常に大きく反復的であるため、圧縮はおそらく非常にうまく機能します。一部の古いブラウザは解凍をサポートできませんが、私の典型的な顧客はそれらを使用しません(ただし、ある種の'を生成できればいいのですが。ブラウザのメッセージをアップグレードしてください)

私はファイルを自動生成し、各ファイルタイプに合わせて.htaccessファイルを簡単に生成できます。基本的に私が欲しいのは、常にonバージョンのmod_gunzipです。ファイルが大きく、繰り返し提供するため、コマンドラインで一度だけ圧縮できるメソッドが必要です。

このサイトやgzipでこれを行う方法について他の情報を見つけましたが、誰かがdeflateでこれを行う方法を教えてくれるかどうか疑問に思いました。.htaccessファイルがどのように見えるか、および最適な圧縮を取得するために使用する必要があるコマンドラインコード(GNU / Linux)を含む完全な回答のボーナスポイント。準拠していないブラウザに「申し訳ありませんがファイルがありません」というメッセージを送信する方法にも対応する回答のスーパーボーナスポイント。

このような質問をカバーするために「precompression」タグを作成できれば素晴らしいと思います。

-FT

4

4 に答える 4

8

編集: mod_mime に AddEncoding が見つかりました

これは機能します:

<IfModule mod_mime.c>
 <Files "*.html.gz">
  ForceType text/html
 </Files>
 <Files "*.xml.gz">
  ForceType application/xml
 </Files>
 <Files "*.js.gz">
  ForceType application/javascript
 </Files>
 <Files "*.gz">
  AddEncoding gzip .gz
 </Files>
</IfModule>

AddEncodingドキュメントでは、必要なだけのように聞こえますが、うまくいきませんでした。

また、Lighttpd のmod_compressionは、(圧縮された) ファイルを圧縮およびキャッシュできます。

于 2010-06-20T07:32:06.650 に答える
3

もし私があなたなら、apache レイヤーでこれを行う代わりに、組み込みのファイルシステム圧縮を検討します。

Solaris では、zfs には透過的な圧縮機能があり、zfs compress を使用してファイルシステムを圧縮するだけです。同様に、Windows はフォルダーを圧縮できます。Apache は、ディスク上で圧縮されているという事実に気づかずにコンテンツを提供します。Linux には、透過的な圧縮も行うファイルシステムがあります。

于 2010-06-22T16:48:51.847 に答える
2

コマンド ラインでは、zlib の zpipe をコンパイルします: http://www.zlib.net/zpipe.c

zpipe < BIGfile.html > BIGfile.htmlz

例えば。

次に、Zash の例を使用して、フィルターを設定してヘッダーを変更します。これにより、最新のブラウザーがおそらくサポートしている RAW deflate ファイルが提供されるはずです。

ファイルを圧縮する別の方法については、zlib (-z) または PKWare zip (-K) 圧縮オプションを指定したpigzの使用を検討してください。これらが Content-Encoding セットで機能するかどうかをテストします。

于 2010-06-21T18:56:49.363 に答える
0

moz_gzip/mod_defalte を直接処理せずにコンテンツを圧縮する簡単な方法は、ob_gzhandler を使用してヘッダーを変更することです (出力がブラウザーに送信される前に)。

<?php
/* Replace CHANGE_ME with the correct mime type of your large file. 
 i.e: application/json
*/

ob_start ('ob_gzhandler');
header('Content-type: CHANGE_ME; charset: UTF-8');
header('Cache-Control: must-revalidate');
$offset = 60 * 60 * 2 ;
$ExpStr = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT';
header($ExpStr);

/* Stuff to generate your large files here */
于 2010-06-16T12:14:13.173 に答える