1706699668
2024-01-30 10:14:14
小文字と大文字は同じ量のデータを使用します — 1 byte それぞれ。
したがって、大文字を小文字に交換するとデータが節約されることを知るのは驚くべきことです。
例: 私は次の表紙を撮りました ハッカーニュース の各記事のタイトルを書き直しました。 sentence case の代わりに title case — サイズを小さくする 31 bytes。
いくつかの大文字を小文字に変更するとデータが節約されるというのはどうして本当なのでしょうか? 答えは 圧縮。
直感的ではありませんが、テキスト圧縮の仕組みを理解すると、理解できるようになります。
この記事では…
- テキスト圧縮の仕組みを理解するのに役立ちます。 インタラクティブな例!
- 私がどのようにしてその結論に至ったかを示してください
title caseハッカーニュースでは、 スリランカ全土を走行する自動車と同等の年間二酸化炭素量に相当します。 - この知識をどのような用途に活用できるかの例をいくつか示します。 計画的にデータを保存します。
なぜ小文字はデータを保存するのですか? #
テキスト圧縮は次の場合により効果的です。
- テキスト内の文字の種類が少ない
- あまり一般的ではない文字は使用頻度が低い
- 文字または文字のグループがより頻繁に繰り返されます。
大文字を、より一般的な対応する小文字に置き換えると、これら 3 つすべてに役立ちます。
これが機能する理由を理解するには、圧縮がどのように機能するかを理解する必要があります。
テキスト圧縮はどのように機能しますか? #
テキスト圧縮がどのように機能するかを説明するために、特に deflate で一般的に使用されるアルゴリズム zip ファイル。 他のアルゴリズムでも原則は同じです。
Deflate は 2 つの圧縮方法を使用します。 Huffman encoding そして LZSS — これらの圧縮方法は両方とも、大文字を小文字に置き換えることによって影響を受けます。
ハフマン符号化 #
deflate アルゴリズムは次のように始まります。 Huffman encoding。
非圧縮テキスト ファイル内の各文字は、同じ量のデータを使用します。 (これは正確には真実ではありませんが、この説明には十分真実です。)
で utf-8 これは 8 bits。 (ビットはバイナリです 1 または 0)
を使用したテキスト ファイル utf-8 文字を次のようにエンコードします。
B は 01000010
b は 01100010
a は 01100001
o は 01101111
さて、これら 4 文字だけを使用する単語を考えてみましょう。 Baobab。
使用する utf-8 テキスト Baobab 次のようにエンコードされます: 010000100110000101101111011000100110000101100010。
他の文字が必要ないことがわかっている場合は、使用するビット数が少なくなるようにエンコードを変更することで、大量のデータを節約できます。
私たちは変えることができる B に 10、 b に 11、 a に 00、 そして o に 01。
本文 Baobab に圧縮します 100001110011。
言葉 Baobab 4 つの異なる文字が含まれているため、私たちができる最善のことは、それぞれに名前を付けることです。 2-bit 順序。
しかし、小文字にすると、 B、異なるキャラクターは 3 人だけなので、さらに一歩進めることができます。
エンコーディングを変更して、最も頻繁に使用される文字を変更することもできます。 b、のみで表されます。 1-bit。 の圧縮バージョンを縮小する baobab に 101001011
これを行うには、 Huffman encoding。
使用する Huffman encoding より頻繁に使用される文字をより少ないビットで表現できます。
これがどのように機能するかについてインタラクティブに説明します。 以下にテキストを入力すると、非圧縮および圧縮されたバイナリ形式が表示されます。
ハフマン エンコーディングを使用してテキストを圧縮するには、まずテキスト内のすべての文字の頻度テーブルを作成する必要があります。 これを行うために私たちは…
- 各文字の数を数えます
- 頻度順に並べる。
次に、 ハフマンツリー 次のルールに従います。
- 各キャラクターを
leaf私たちの木に。 - 最も低い周波数を持つ 2 つの文字を取得し、それらをノードに接続します。そのノードに、両方の葉の結合周波数を与えます。
- これら 2 つの葉をリストから削除し、代わりにそれらの接続ノードをリストに追加します。
- リストにリーフまたはノードがなくなるまで、上記の手順を繰り返します。
少し複雑ですが、完了すると次のようなきれいな図を作成できます。
上記のツリーを使用して、各文字の新しいエンコーディングを計算できます。
各文字のエンコーディングを決定するには、ツリーの最上部から開始して、文字に向かって下に降りて、そのエンコーディングを見つけます。 左に下るたびに、 0、右に行くと、 1。
テキスト内でより頻繁に出現する文字は、ツリーを下る時間が短いため、より少ない文字数でエンコードできます。 1s そして 0s。
より小さな木でより多くの節約 #
デコードできません Huffman encoding 木なしで。 したがって、圧縮されたテキストを送信すると、 Huffman encoding 木も一緒に送ります。
テキスト内で使用する大文字の数を減らすことで、特定の大文字が含まれない可能性が高くなります。 つまり、お送りする木も小さくなります。
たとえば、「減圧は圧縮委員会の使命である」というテキストを次のように変更するとします。 title case に sentence case 大文字の場合、ツリーに葉は必要ありません M そして C。 これにより、圧縮がより効率的になりますが、 Huffman tree より小さい。
Deflate 別の圧縮方法も使用します。 データを圧縮します Huffman encoding そしてもう一度使用して、 Lempel-Ziv-Storer-Szymanski (LZSS) アルゴリズム。
LZSS は、繰り返されるデータのチャンクを検索し、最初に出現したときの短い参照に置き換えることによって機能します。
参照は、繰り返されるシーケンスを pointer。 このポインタは 2 つの数値で構成されます。
- 最初の数字は、元のシーケンスを見つけるためにどれだけ遡ればよいかを示します。
- 2 番目の数値は、元のシーケンスの長さを示します。
LZSS アルゴリズムがどのように機能するかを示す簡略化された例を次に示します。ポインタは次のように表示されます。 <1,2>。
以下の入力を試してみましょう。 大文字を削除すると、シーケンスの繰り返しが増え、バイト数が減少する様子をご覧ください。
小文字で保存できるデータ量はどれくらいですか? #
すべてを小文字にする前に、オンラインの無駄に関しては、さらに悪質な犯罪者が存在することを思い出してください。 例: 最適化されていない画像、自動再生ビデオ、未使用の JavaScript。 それらを最初に実行してください。
しかし、そうは言っても、小文字は驚くほど効果的です。 以下に例を示します。
Hacker News でタイトルの大文字を文の大文字に置き換える #
冒頭で述べたように、私は Hacker News のトップページを取り上げ、各記事のタイトルを sentence case の代わりに title case。
それぞれ html ファイルの文字数はまったく同じですが、zip ファイルに圧縮すると、 title case ファイルは 5,992 bytes そしてその sentence case ファイルは 5,961 bytes。 保存 31 bytes!
おそらくそれほど多くはありませんが、見出しが読みやすくなるという素晴らしい副作用です。
が提供する式を使用すると、 持続可能なウェブデザイン.org Hacker News にアクセスするたびに節約できることがわかります 0.00001059642g 書かれている場合は炭素の sentence case。
Hacker News が話題になったと仮定すると、 10 million 毎日の訪問を刑のケースに変更することで、予防が可能になります。 105g 毎日の炭素量。 それは燃えるのと同じです 4.3 年間ガロンのガソリン。 ミニクーパーを運転するのに十分な燃料 137.6 miles — スリランカの幅とほぼ同じ。
体系的に大文字と小文字を区別しないコードを小文字にします。 #
一部のミニファイアーは、圧縮後に数バイトを節約するために一部のコードを自動的に小文字にしますが、これは一般的ではなく、一貫して適用されるものでもありません。
からの任意の最適化 minifier おそらく次のカテゴリーに当てはまります 小さすぎて気にならない — しかし、それらを総合すると大量のデータが節約され、Web サイトが高速になり、エネルギー消費量が減ります。
たとえば、多くの html ファイルは次のように大文字の doctype 宣言で始まります。
DOCTYPE html>
しかし HTML5 仕様では大文字と小文字を区別しないと記載されています、だから、 html minifier これを次のように変更すると、データを節約できます。
doctype html>
この最適化は次のように実装されました。 html-minifier しかし他人によってではありません。
小文字を使用できるコードの例 #
データを保存するために小文字にできるコードの例は数多くあります。 以下に、大文字にする必要がない場合によく使用される例をいくつか示します。
面白いと思っていただければ幸いです。 あなたも同様に、エネルギーを節約するためにウェブを最適化することに協力したい場合は、これらの例をさらに収集するのを手伝ってください。 この git リポジトリ。
- 出版された
- 2023 年 11 月 25 日
- 修正された
- 2023 年 11 月 25 日
- 著者
- ナサニエル
- タグ
postsminutiaweb performancecompressionsite speed
#小文字がデータを保存する理由