2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Lz4.jsとfflateの性能比較

Posted at

圧縮アルゴリズムの一つに、LZ4というのがあります。
圧縮が早く、展開が非常に高速として有名で、サーバー間通信などで使われています。

このLZ4のJavaScript実装として、Lz4.jsがあります。
このLz4.jsの性能は、他の圧縮系ライブラリと比較してLZ4の特徴通り高速なのでしょうか。

推測するな、計測せよ

ということで、ベンチマークを取ってみることにしました。

実験

比較対象として、fflateを用います。
fflateはJavaScriptでDeflate圧縮展開を行うライブラリです。
同様のライブラリとして有名なpakoと比較して、圧縮展開が高速で、ファイルサイズも小さく、ZIPサポートやマルチスレッド対応など機能が追加されています。

ベンチマーク条件

  • ブラウザ上で実行
  • 圧縮・展開するファイルは約5MBのテキスト(C/Migemoの辞書)

結果

さて、結果は以下の通り

ライブラリ level 圧縮時間 展開時間 サイズ比
fflate 0.0 23.7 6.0 1.000078
fflate 1.0 183.8 79.8 0.398835
fflate 2.0 199.5 65.5 0.391483
fflate 3.0 221.7 42.4 0.386562
fflate 4.0 248.5 42.1 0.382764
fflate 5.0 255.7 42.1 0.382753
fflate 6.0 346.2 40.3 0.378795
fflate 7.0 389.3 41.0 0.378133
fflate 8.0 465.8 40.4 0.377853
fflate 9.0 467.9 40.5 0.377850
lz4js NaN 82.2 29.3 0.584434

グラフにしてみましょう。
まず、サイズ比と圧縮時間のグラフです。

a1.png

fflateは圧縮レベルを0から9まで設定できます。
このうち、無圧縮の0を除いた1から9までの圧縮レベルによる結果が青色のプロットです。
圧縮レベルを大きくするほど、ファイルは小さくなりますが、圧縮時間は大きく伸びます。
オレンジ色でプロットしたLz4.jsは、fflateと比較して約半分の圧縮時間、1.5倍のファイルサイズとなりました。

LZ4の圧縮が高速という特徴どおり、Lz4.jsにおいても圧縮は高速です。

次に、サイズ比と展開時間のグラフです。

a2.png

fflateでは圧縮レベルが大きいほど、展開が早くなっています。
圧縮レベル1・2は特に遅いですね。

Lz4.jsの展開時間はfflateの約3/4倍であり、やはり早いです。

まとめ

まとめると、Lz4.jsはLZ4アルゴリズムの特徴どおり、圧縮展開が高速です。
fflateと比較して圧縮時間は1/2、展開時間は3/4と小さくなります。
一方、圧縮後ファイルサイズはDeflateアルゴリズムに劣り、圧縮後は1.5倍のファイルサイズになるため、使い所を見極める必要があります。

補足

fflateの開発者も指摘していますが、Node.jsにはネイティブ実装のDeflateアルゴリズムがあります。
Node.jsでDeflateアルゴリズムを使うなら、fflateよりもzlibパッケージを検討すべきです。

Before you decide that fflate is the end-all compression library, you should note that JavaScript simply cannot rival the performance of a native program.
https://github.com/101arrowz/fflate

fflateのデフォルトの圧縮レベルは6です。
高速に圧縮する圧縮レベル1と比較して、圧縮レベル6は約2倍の圧縮時間のわりに、ファイルサイズはあまり変わりません。
今回の実験結果から、圧縮レベル3~5がちょうどいいのではないかと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?