これは、CSS アイコン/再利用可能な画像の一般的な手法です。
src
を使用して画像を取得できます$(element).attr('src');
。
ただし、HTMLマークアップに含めるために、画像バイナリ(画像ファイル自体を意味していると思います)をbase64にエンコードする利点はわかりません。あなたはこれを少し考えすぎているかもしれません。
111
主にベース64は元のデータで使用されているエンコーディングよりも狭い文字セットであるため(バイナリ=デシマルと考えてください)、画像データをベース64に再エンコードすることでバイトを「節約」できるとは思わない7
ので、実際にはより大きな出力。(しかし、それは私の理論作成にすぎないので、間違っている場合は修正してください。)
ただし、たとえば、最大で同じサイズのマークアップに再エンコードすることができた場合、「より高速なダウンロード」で前進することはありません。あなたはまだ同じ量のデータをダウンロードしています。おそらくもっと。
より小さなペイロードを管理する場合、エンコード/再エンコードのパフォーマンスへの影響は価値がありますか? クロスブラウザの互換性は言うまでもありません。
より良い手法は、画像を 1 つの画像ファイルにパッケージ化して (これが演習の精神です)、ブラウザーに通常どおりダウンロードさせることです。画像の 1 つのコピーがダウンロードされると、ブラウザによってキャッシュされている限り、それ以上ダウンロードされることはありません。
編集
Web ページのキャッシュに関する編集に答えるには、はい、Web ページはキャッシュされます。base-64 でエンコードされた画像も同様です。ただし、画像は事実上 HTML マークアップの一部であるため、HTML ページと共にキャッシュされます。
たとえばfoo.html
、(エンコードされたスプライト ファイルを含む) ダウンロードすると、通常どおりマークアップを確実に取得できます。そのページはキャッシュされます。
ここで、ダウンロードしますbar.html
(私のスプライト ファイルも使用します)。ブラウザbar.html
に関する限り、その画像はfoo.html
. そこにイメージが挟まれていることに気付かないかもしれません。
キャッシュが機能する方法 (私が理解できる限り) はURL マッチングです。これが、あるページでダウンロードし、別のページで再度facepalm.jpg
要求すると、ブラウザーは既にダウンロードしたことを認識し、そうしない理由です。facepalm.jpg
あなたのエンコーディング プランでは、私は にリクエストfoo.html
(またはその一部) を行うつもりはありませbar.html
ん。
foo.html
ただし、もう一度アクセスすると、「以前にダウンロードした」ため、そのページのキャッシュのすべての利点が得られます。