web-dev-qa-db-ja.com

圧縮されたPNG画像が多いほど、読み込みに時間がかかりますか?

ディスクサイズが非常に小さいPNGファイルを作成する場合、ファイルサイズは、視聴者が画像を解凍するのに必要な時間よりも重要ではなくなるのではないかと思う傾向があります。技術的にはそれも些細なことですが、私は長い間それについて疑問に思っていました。圧縮率の高いPNG画像は圧縮に時間がかかることは誰もが知っていますが、解凍に時間がかかるのでしょうか。

この情報が質問に影響するかどうかはわかりませんが、アイコンタイプのファイル(ピクセルが少ないために小さい)と巨大な線画ファイル(圧縮するために小さい)の両方に関連してこれについて疑問に思っていますピクセルは非常に効果的です)。

編集:私が得ている答えに応えて、これは厳密にはネットワークの問題ではないことに注意したいと思います。 Windowsユーザーはこれに気付かないかもしれませんが、デスクトップ環境で使用されるほとんどのアイコンはPNG圧縮で保存されており、システムの起動時に数十個のアイコンをレンダリングする必要があります。私が言及した巨大な線画は、ほとんどが http://simpledesktops.com/ のようなデスクトップの壁紙でしたが、さまざまなポスター、ビデオゲームのリソース、その他のものもその説明に当てはまります。

5
Wutaz

より適切に圧縮された画像(つまり、ファイルサイズが小さい)は、通常、サイズが大きい同じ画像よりも読み込みにかかる時間が短くなります。

PNGファイルを保存するときにファイルサイズを最小化したい場合は、ファイルの圧縮にかかる時間が犠牲になります。

PNGは、DEFLATE(zlibおよびPKZIPで使用されるのと同じアルゴリズム)を使用して画像データを圧縮します。 DEFLATEがスペースを節約する1つの方法は、ランレングスと、以前にストリームに表示されていた場所までの距離を指定するだけで、繰り返しバイトシーケンスをエンコードすることです。 (例:A B C D E F A B C A B C DA B C D E F [3,-6] [4,-9]としてエンコードできます。(A B C D E F [3,-6] [3,-3] Dとしてエンコードすることもできます。)

コンプレッサーは、アルゴリズムを使用して、一致するシーケンスをエンコードする前に検索する必要があります。アルゴリズムはさまざまですが、特定のパラメーターを使用して、それらの多くをよりハードに動作させたり、より速く実行したりすることができます。アルゴリズムがよりハードに機能する場合、一致するものが多かれ少なかれ見つかる可能性があります。これにより、通常は圧縮が向上しますが、実行に時間がかかります。

対照的に、解凍アルゴリズムは非常に単純で、多くの作業を行う必要はありません。ストリームをかなり線形にデコードするだけで、コンプレッサーによって提供されるため、一致するものを検索する必要はありません。提供された長さ/距離コードを検索します。

一般に、読み込むビットが少ないほど、PNGの解凍が速くなる可能性があります。

2
mwfearnley

私はあなたのために少し実験をしました-それは完璧ではありませんが、それは問題の範囲にいくつかのインサイトを与えるはずです。

オンラインで大きなPNGファイルを見つけ、GIMPで開いて、2つのバージョンを保存しました。1つは圧縮レベル9(非常に小さい)、もう1つは圧縮レベル0(大きい)です。

高度に圧縮されたファイルは1.8メガバイトで、軽く圧縮されたpngは4.7メガバイトでした。この画像は私がグーグルから取得したもので、星団の写真でした。

次に、画像をpngからtifに変換するスクリプトを作成し(TIFは比較的非圧縮のファイル形式であるため、非常に高速であると想定)、出力の時間を計測しました。いずれの場合も、スクリプトをすばやく実行し、数秒後に中止したため、完全なテストを実行する前にシステムキャッシュが有効になり、ディスクioの影響が軽減されました(コンピューターはSSDを使用するため、その影響も最小限に抑えられます)。結果は次のとおりです。

Converting the small file 200 times - 1 minute, 16.07 seconds
Converting the large file 200 times - 1 minute, 22.39 seconds

したがって、高度に圧縮されたファイルは、軽く圧縮されたファイルよりも解凍に約10遅いように見えます。

ただし、これにはファイルのダウンロードにかかる時間は考慮されていません。もちろん、これは接続の速度、サーバーまでの距離、ファイルのサイズによって異なります。大きなファイルを送信してから小さなファイルを送信するのに約0.5秒以上かかる場合は(私のシステムでは、古いウルトラブックであるため、非常に遅いため、保守的なシナリオが得られます)、より高度に圧縮されたファイルを送信することをお勧めします。ファイル。この場合、これは1秒あたり5.8メガバイトを送信することを意味します。これは、遅延の問題を除いて、1秒あたり60メガビットに相当します。

大きなファイルの結論-使用頻度の低いLANを使用している場合は、圧縮率の低いイメージを使用する方がおそらく高速ですが、インターネットに接続すると、圧縮率の高いファイルを使用する方が適切です。

ところで、私は1000回の反復でテストを再実行しています。これらの数値が得られたら、投稿を更新します。これらの数値はかなり似ていると思います。

1
davidgo