9

PHP マニュアルには、gzdeflate に関する次のようなコメントがあります。

gzcompress は、エンコーディングに関する情報を文字列に埋め込むため、より長いデータを生成します。1 台のマシンでのみ処理されるデータを圧縮する場合は、これらの関数のどれを使用するかについて心配する必要はありません。ただし、これらの関数で圧縮されたデータを別のマシンに渡す場合は、gzcompress を使用する必要があります。

その後

さまざまなコンテンツで 50000 回の繰り返しを実行したところ、コンテンツと圧縮レベルに関係なく、gzdeflate() と gzcompress() の両方が同等に高速に実行されることがわかりましたが、gzinflate() は常に gzuncompress() の約 2 倍の速さでした。

私の目的のために、将来の使用のためにマシンにデータをアーカイブしています。データは頻繁に読み取られますが、書き込まれるのは 1 回だけです。理論的には、ある時点でサーバーを変更すると、いつか別のマシンに移動することになりますが、それは数年後のことです.

gzcompress と gzuncompress ではなく、gzdeflate と gzinflate を使用しても安全ですか?

私の考えは次のとおりです: gzinflate はより高速であり、これは多くの読み取り要求があるため、サーバーにとって非常に役立ちます。将来のある時点でファイルを読み取れなくなった場合、ファイルを解凍して再圧縮する方法を見つけられるはずですよね? 最初のコメントが言っているように、gzinflate がいつか魔法のように機能しなくなるわけではありません。6 バイトのヘッダーがなくても、何とか拡張できると確信しています。

考え?

更新 -- ベンチマーク

それぞれ 10,000 回の反復:

gzdeflate took 19.158888816833 seconds and size 18521
gzinflate took 1.4803981781006 seconds
gzcompress took 19.376484870911 seconds and size 18527
gzuncompress took 1.6339199542999 seconds
gzencode took 20.015944004059 seconds and size 18539
gzdecodetook 1.8822891712189 seconds
4

1 に答える 1

11

コメントはナンセンスです。gzcompressgzdeflate、またはのいずれかを使用して、gzencodeどこでも移植可能に解凍できる圧縮データを生成できます。これらの関数は、deflate データのラッパーのみが異なります (RFC 1951)。 gzcompresszlib ラッパー (RFC 1950)gzdeflateがあり、ラッパーがなくgzencode、gzip ラッパー (RFC 1952) があります。

ラッパーがないということは整合性チェックがないことを意味するため、 を使用しないことをお勧めします。deflate フォーマットを使用する zip ファイルなど、他のラッパーがそれ以外で生成されている場合にのみ使用してください。速度に関するコメントはほぼ間違いありません。の整合性チェックは、解凍に比べてほとんど時間がかかりません。独自のテストを行う必要があります。gzdeflategzdeflategzuncompress()

この 1 つの例から一般化しすぎているかもしれませんが、PHP ドキュメントのコメントは完全に無視する必要があります。彼らは、寛大で、無知です。

ところで、これらの関数はひどく紛らわしい方法で命名されています。名前に " "のみgzencodeを含める必要があります。gzこれは、実際に形式を扱う唯一のものであるため.gzです。 gzcompressgzip 形式に圧縮されているように聞こえますが、実際には zlib 形式に圧縮されます。

于 2013-02-22T16:07:39.983 に答える