Greasemonkey ユーザー スクリプトのソースを調べていたところ、CSS に次の記述があることに気付きました。
.even { background: #fff url(data:image/gif;base64,R0lGODlhBgASALMAAOfn5+rq6uvr6+zs7O7u7vHx8fPz8/b29vj4+P39/f///wAAAAAAAAAAAAAAAAAAACwAAAAABgASAAAIMAAVCBxIsKDBgwgTDkzAsKGAhxARSJx4oKJFAxgzFtjIkYDHjwNCigxAsiSAkygDAgA7) repeat-x bottom}
Greasemonkey スクリプトが、サーバー上でホストするのではなく、ソース内に可能な限りすべてをバンドルしたいと考えるのは当然です。しかし、この手法はこれまで見たことがなかったので、その使用を検討したところ、いくつかの理由で魅力的に思えました。
- ページの読み込み時のHTTPリクエストの量が減り、パフォーマンスが向上します。
- CDNがない場合、画像と一緒に送信されるCookieによって生成されるトラフィックの量が減少します。
- CSSファイルはキャッシュできる
- CSSファイルはGZIP圧縮できる
たとえば、IE6 では背景画像のキャッシュに問題があることを考慮すると、これは最悪のアイデアではないようです...
では、これは良い方法でしょうか、それとも悪い方法でしょうか。なぜこれを使用しないのでしょうか。また、画像を base64 でエンコードするにはどのようなツールを使用すればよいのでしょうか。
更新 - テストの結果
画像によるテスト:http://fragged.org/dev/map-shot.jpg- 133.6KB
専用 CSS ファイル:http://fragged.org/dev/base64.css- 178.1KB
GZIPエンコードサーバー側
クライアントに送信された結果のサイズ (YSLOW コンポーネント テスト): 59.3Kb
クライアントブラウザに送信されたデータの保存: 74.3Kb
いいですね、でも小さい画像の場合はあまり役に立たないと思います。
更新: PageSpeed に取り組んでいる Google のソフトウェア エンジニアである Bryan McQuade 氏は、ChromeDevSummit 2013 での講演で、CSS の data:uris は、クリティカル/最小限の CSS を提供する際のレンダリングをブロックするアンチパターンであると述べました
#perfmatters: Instant mobile web apps
。http://developer.chrome.com/devsummit/sessionsそしてそれを心に留めておいてください -実際のスライド
ベストアンサー1
画像とスタイル情報を別々にキャッシュしたい場合は、これは良い考えではありません。また、大きな画像や大量の画像を CSS ファイルにエンコードすると、ブラウザがファイルをダウンロードするのに時間がかかり、ダウンロードが完了するまでサイトにはスタイル情報が何も表示されません。頻繁に変更する予定のない小さな画像の場合は、これは適切なソリューションです。
base64 エンコーディングを生成する場合:
- http://b64.io/
- http://www.motobit.com/util/base64-decoder-encoder.asp(アップロード)
- http://www.greywyvern.com/code/php/binary2base64(下の小さなチュートリアルのリンクから)