| 原作者 | ジルキ・アラクイハラ、ゾルタン・シャバトカ |
|---|---|
| 開発者 | ジルキ・アラクイハラ、ユージン・クリチニコフ、ロバート・オブリク、ゾルタン・ザバッカ、ロード・ヴァンデヴェンヌ |
| 初回リリース | 2013年10月15日 |
| 安定版リリース | 1.1.0 [1]
/ 2023年8月31日 |
| リポジトリ |
|
| 書かれた | C |
| オペレーティング·システム | クロスプラットフォーム |
| プラットフォーム | ポータブル |
| タイプ | データ圧縮 |
| ライセンス | MITライセンス |
| Webサイト | ブロトリ |
Brotli は、Googleが開発したロスレス データ圧縮アルゴリズムです。汎用LZ77ロスレス圧縮アルゴリズム、ハフマン コーディング、2 次コンテキスト モデリングを組み合わせて使用します。Brotli は主に、Web サーバーやコンテンツ配信ネットワークでHTTP コンテンツを圧縮し、インターネット Web サイトの読み込みを高速化するために使用されています。gzipの後継であり、すべての主要な Web ブラウザーでサポートされており、gzip よりも優れた圧縮率を提供するため、ますます人気が高まっています。[引用が必要]
歴史
Google の従業員である Jyrki Alakuijala 氏と Zoltán Szabadka 氏は、2013 年にWOFFウェブフォントの転送サイズを削減するために Brotli を最初に開発しました。 [2] Alakuijala 氏と Szabadka 氏は、2013 年から 2016 年にかけて Brotli 仕様を完成させました。この仕様には、2013 年に Google のdeflateおよびgzip互換圧縮のzopfli実装を開発した Evgenii Kliuchnikov 氏と Lode Vandevenne 氏という 2 人の追加著者によって開発された参照実装が付属していました。 [3] : 1 既存のデータ形式仕様の再実装である zopfli とは異なり、Brotli は新しいデータ形式であり、著者は圧縮率をさらに向上させることができました。[4]
Brotli 仕様は、2015 年 9 月に HTTP ストリーム圧縮 (コンテンツ エンコーディング タイプ "br") 向けに一般化されました。この一般化された反復では、頻繁に使用される単語やフレーズの定義済み辞書を使用することで、圧縮率も向上しました。Google ソフトウェア エンジニアによって 2015 年 9 月にリリースされた Brotli のバージョンには、汎用ロスレス データ圧縮の機能強化が含まれており、特にHTTP 圧縮での使用に重点が置かれています。エンコーダーが部分的に書き直された結果、圧縮率が向上し、エンコーダーとデコーダーの両方が高速化され、ストリーミング API が改善され、圧縮品質レベルが追加されました。さらに、新しいリリースでは、デコード メモリの削減により、プラットフォーム間でパフォーマンスが向上しています。[4]
インターネット技術タスクフォースは、 2016年7月にBrotli圧縮データ形式の仕様を情報提供要請(RFC 7932)として承認しました。 [5] Brotliデータ形式は、 Webオープンフォント形式の第2版の不可欠な部分であり、[5] : 3 は、W3Cでのフォント技術標準化に対して、全米テレビ芸術科学アカデミーから2021年のテクノロジー&エンジニアリングエミー賞を受賞しました。[6] [7]
Brotliのサポートは長年にわたってウェブブラウザに追加されており、2022年7月現在、世界中のユーザーの96%がこの形式をサポートするブラウザを使用しています。[8]
2016年にDropboxは悪意のあるクライアントに対してより安全であるという要件を満たすためにBrotliをRustで再実装しました。 [9] [10]
アルゴリズム
Brotli の新しいファイル形式により、作成者はいくつかのアルゴリズムおよび形式レベルの改善によって Deflate を改良できます。改善の例としては、リテラルとコピー距離のコンテキスト モデルの使用、過去の距離によるコピー距離の記述、エントロピー コード選択における最前列への移動キューの使用、リテラルとコピーの長さの結合エントロピー コーディング、ブロック分割におけるグラフ アルゴリズムの使用、および後方参照ウィンドウの拡大などがあります。
大半の汎用圧縮アルゴリズムとは異なり、Brotli は、動的に設定される(「スライディング ウィンドウ」)辞書に加えて、約 120 KiB のサイズの定義済み辞書を使用します。定義済み辞書には、テキストと HTML ドキュメントの大規模なコーパスから抽出された 13,000 を超える一般的な単語、フレーズ、およびその他の部分文字列が含まれています。 [11] [3]定義済み辞書を使用すると、ファイルによく使用される単語が主に含まれている場合に圧縮率が向上することが示されています。[12] Brotli のスライディング ウィンドウは 16 MiBに制限されています。これにより、リソースが限られた携帯電話でのデコードが可能になりますが、より大きなファイルを持つ圧縮ベンチマークでは Brotli のパフォーマンスが低下します。ウィンドウ サイズの制約は、 RFC7932(Brotli 本体)と互換性のないLarge Window Brotli を使用することで緩和できます。[13]
名前
Google のdeflate 圧縮アルゴリズムのzopfli実装は、スイスドイツ語でスナックサイズの編みこみバターパンを意味する Zöpfli にちなんで名付けられましたが、brotli はスイスドイツ語でロールパンを意味する Brötli にちなんで名付けられました。[4] Google 独自の Brotli 仕様の実装は、2016 年に寛容なフリーソフトウェア MIT ライセンスの条件の下でリリースされました。Brotli 仕様の正式な検証は、zlib / gzip 圧縮形式およびライブラリの共同作成者の 1 人である Mark Adler によって独立して実装されました。[ 5 ] Adlerの 実装は、同様に寛容なApache ライセンスの条件の下でリリースされました。[14]この仕様の他の実装も存在し、その中にはソースからソースへのHaxe言語での実装も含まれます。
アプリケーション
Brotli圧縮は、Web上でgzipの代替として一般的に使用されています。Brotliは全体的に優れた圧縮率を提供するためです。[15] gzip圧縮と比較すると、Brotliで圧縮されたJavaScriptファイルはおよそ15%小さく、HTMLファイルはおよそ20%小さく、CSSファイルはおよそ16%小さくなります。[16]
リファレンス実装には、brotliに似たコマンドラインプログラムが同梱されていますがgzip、[17] Unix系の環境では単純な圧縮プログラムとしてはあまり使われていません。Libarchiveの開発者は、ファイル形式を示すマジックナンバー.brがないため、ファイルの生のストリーム形式をサポートするのが難しいと感じています。 [18]
業界のサポート
ブラウザとその他のクライアント
- Mozilla Firefoxはバージョン44(2016年1月26日リリース)で「br」コンテンツエンコーディング方式のサポートを導入しました。[19]
- Google Chromeはバージョン50(2016年4月20日リリース)以降、「br」コンテンツエンコーディング方式をサポートしています。[20]
- Operaはバージョン38(2016年6月8日リリース)以降、「br」コンテンツエンコーディング方式をサポートしています。[20]
- Microsoft Edgeはバージョン15(2017年4月5日リリース)以降、「br」コンテンツエンコーディング方式をサポートしています。[21]
- Safari はバージョン 11 (2017 年 10 月 5 日リリース) 以降、「br」コンテンツ エンコーディング方式をサポートしています。
- cURLには、2017年11月29日にリリースされたバージョン7.57以降、libbrotliを使用した「br」コンテンツエンコーディング方式をサポートするコンパイル時オプションがあります。[22]
- 7zipは7zip-zstdによってBrotliで拡張されて利用可能である。[23]
- PeaZipは圧縮と解凍にBrotli .BR形式をサポートしています[24]
ウェブサーバー
- Apache HTTP Serverでは、バージョン2.4.26以降、 mod_brotliモジュールによって「br」コンテンツエンコーディング方式がサポートされています。[25]
- Microsoft IISには、2018年5月からサポートされている拡張機能があり、「br」コンテンツエンコーディング方式のサポートが追加されています。[26]
- Microsoft Azure Front Doorは、2019年4月17日のリリース以来、 Brotli [27]を使用してエッジ上でコンテンツを動的に圧縮することができます。[28]
- nginx には、 2016 年 12 月から Google によって提供されるngx_brotliモジュールがあります。
- Node.js にはバージョン 11.7.0 以降、ネイティブのエンコードとデコーダーが組み込まれており、これを使用して「br」コンテンツ エンコーディングをサポートできます。
- Amazon CloudFrontは、2020年9月現在、Brotliを使用してエッジでキャッシュ可能なレスポンスを自動的に圧縮できます。[29]
- LiteSpeed Web Server には、 2017 年 7 月のバージョン 5.2 以降、静的ファイルのみに「br」コンテンツ エンコーディング メソッドが含まれています。
- Cloudflare CDNは、エッジノードとユーザー間のデータを圧縮するbrotliオプションを提供しています。[30]
- NaviServer はバージョン 4.99.17b1 で[ permanent dead link ]のサポートを追加しました
- Caddy は、2016 年 12 月 21 日のバージョン 0.9.4 以降、静的に圧縮された .br ファイルを提供します。
- lighttpd mod_deflateは2020年11月の1.4.56 [31]以降で.brをサポートしています。
参考文献
- ^ “リリース 1.1.0”. 2023年8月31日. 2023年9月18日閲覧。
- ^ Sheeter, Rod (2015 年 2 月 18 日)、「WOFF 2.0 と unicode-range を使用した小さいフォント」、Google Open Source Blog、カリフォルニア州マウンテンビュー: opensource.googleblog.com。
- ^ ab Alakuijala, Jyrki; Kliuchnikov, Evgenii; Szabadka, Zoltan; Vandevenne, Lode (2015 年 9 月 22 日)、「Brotli、Deflate、Zopfli、LZMA、LZHAM、Bzip2 圧縮アルゴリズムの比較」(PDF)、The Comprehensive R Archive Network、r-project.org。
- ^ abc Szabadka, Zoltan (2015 年 9 月 22 日)、「Brotli の紹介: インターネット向けの新しい圧縮アルゴリズム」、Google Open Source Blog、カリフォルニア州マウンテンビュー: opensource.googleblog.com。
- ^ abc Alakuijala, Jyrki; Szabadka, Zoltan (2016)、RFC 7932: Brotli 圧縮データ形式、インターネット技術タスクフォースのコメント要求、フリーモント、カリフォルニア州: IETF Trust。
- ^ 「W3C、フォント技術の標準化でエミー賞を受賞」2022年6月1日。
- ^ 「ウェブの様相を変える:W3C ウェブフォントワーキンググループと MPEG がテクノロジー&エンジニアリングエミー賞を受賞」2022-06-01。
- ^ 「…を使用できますか - Brotli」。2022年6月28日。
- ^ バックエンドに Pied Piper を少し追加するための Rust での Brotli によるロスレス圧縮、Daniel Reiter Horn と Mehant Baid、2016 年 6 月 29 日。
- ^ [1]、リシャブ・ジェインとダニエル・ライター・ホーン、2020年8月4日
- ^ Chirgwin, Richard (2015 年 9 月 23 日)、「Google の新たな圧縮: Brotli 圧縮がオープンソース化」、The Register、theregister.co.uk。
- ^ Larkin, Henry (2007). 「モバイル デバイス データ表現のための単語インデックス作成」.第 7 回 IEEE 国際コンピュータおよび情報技術会議 (CIT 2007) . pp. 399–404. doi :10.1109/CIT.2007.22. ISBN 978-0-7695-2983-7. S2CID 8707991。。
- ^ Kliuchnikov, Eugene。「大きなウィンドウ サイズを使用するには? · Issue #639 · google/brotli」。GitHub。
現在、最大 1GiB のウィンドウを許可する「Large Window Brotli」拡張機能をテストしています。[...] 「Large Window Brotli」がリリースされました。
- ^ Adler, Mark (2015 年 1 月 26 日)、「Brotli 仕様のレビューと検証」、Adler brotli、サンフランシスコ: GitHub。
- ^ Calvano, Paul (2018-07-25). 「Brotli 圧縮: コンテンツはどのくらい削減されるか?」. 2021-03-07閲覧。
- ^ Pandjarov, Hristo (2021-01-13). 「Brotli 圧縮アルゴリズムによるサイト速度の向上」. SiteGround . 2021-03-07閲覧。
- ^ 「brotli(1)マニュアルページ」manned.org。
- ^ "Brotli サポート · Issue #1238 · libarchive/libarchive". GitHub .
マジック署名がないと、libarchive はファイルの種類を自動的に認識できないため、自動的に解凍できません。 (Libarchive はファイル名を考慮せず、内容のみを考慮します。)
- ^ Goodger, Ben; et al. (2016 年 1 月 26 日)、「Firefox 44 リリースノート」、Mozilla Firefox、Mozilla Foundation。
- ^ ab Baheux, Kenji (2016 年 1 月 15 日)、「Accept-encoding: br on HTTPS connection」、Chrome プラットフォーム ステータス、chromestatus.com。
- ^ Trace, Rob (2016 年 12 月 20 日)、「Microsoft Edge での Brotli 圧縮の導入」、Microft Edge Developer、blogs.windows.com
- ^ Stenberg, Daniel; et al. "curl - Changes". curl.haxx.se . 2018年1月14日閲覧。
- ^ “README”. GitHub . 2021年10月15日.
- ^ 「Google Brotli: BR ファイルを圧縮、開く、抽出する方法」。
- ^ 「Apache 2.4.26 での変更点」、Apache HTTPD リポジトリ、svn.apache.org。
- ^ 「Brotli 圧縮によるより高い圧縮率」。2023 年 10 月 6 日。
- ^ 「Azure Front Door を使用したキャッシュ」。docs.microsoft.com。2023年 6 月 15 日。
- ^ 「Azure Front Door Service が利用可能になりました」。azure.microsoft.com。
- ^ 「Amazon CloudFront が Brotli 圧縮のサポートを発表」。aws.amazon.com。
- ^ 「Cloudflare は何を圧縮しますか?」support.cloudflare.com。
- ^ 「lighttpd 1.4.56 リリース情報」。redmine.lighttpd.net。
- 注記
- -フィンリー、クリント (2015 年 9 月 22 日)、「Hooli、つまり Google が圧縮コードを無料で配布」、Wired Online、wired.com 。
外部リンク
- GitHubの brotli にある Brotli リファレンス実装
