はてなのプロフィール画像によって表示は遅くなるのかという検証と、プロフィール画像を非表示にするいくつかの方法

http://hxxk.jp/2006/01/28/1548

記事データ

投稿者

真琴

投稿日時

2006-01-28T15:48+09:00

タグ
概要

はてなのプロフィール画像機能の追加によって、はてなブックマークのエントリページの表示は遅くなるのか ? 遅くなるのは嫌、あるいは単純に見辛いという人のために画像を非表示にする方法も合わせてご紹介。

リプライ

2 件のリプライがあります。

記事本文

はてなのプロフィール画像を非表示にしたい

昨日、はてなの機能追加に伴って Greasemonkey スクリプトを修正したのですが、その時はその追加された機能自体については良くもなく悪くもない印象しか抱きませんでした。 ああ、何だか賑やかになったなあ、程度の。

しかし 1 日経って他の人の反応を見てみると、少なからず鬱陶しく思ったり、非表示にしたいと思ったりする人がいることが分かりました。 ( 内部処理的にはどうか知らないけど ) 見た目的に大きな機能追加であり、この機能が撤廃されることは無いでしょう。 かと言って、アイコンを表示したバージョンと表示しないバージョンの両方を準備するのはコスト的にも難しいと思います。 そうなると、同一のページ内で何らかの処理を行う形になりますが、そういった形であればユーザ側で対処できる場合が多々あります。 今回はそういった例を考えてみましょう。

なお、この記事中では主にはてなブックマークのエントリページを想定して書いていますので、それ以外のページや、あるいは今後のプロフィール画像の仕様変更によっては使えない可能性も充分にありえます。 それと、今回はブラウザは Firefox 1.5 を使っているという前提で話を進めます。 それ以外のブラウザまで含めると話が細分化しすぎますので。

また、非表示にしたいと一口に言っても、表示結果が煩雑になって鬱陶しいので非表示にしたいのか、表示が遅くなるから非表示にしたいのかで対処方法が変わってきますので、それぞれについて考えます。

  1. プロフィール画像によって本当に表示が遅くなるのか ? ( 理論編 )
  2. プロフィール画像によって本当に表示が遅くなるのか ? ( 実際のところ )
  3. Firefox の拡張機能 "Adblock Plus" で非表示にする
  4. ユーザ CSS で非表示にする
  5. Greasemonkey スクリプトで非表示にする
  6. まとめ
  7. 関連リンク集

プロフィール画像によって本当に表示が遅くなるのか ? ( 理論編 )

既にこの辺りで表示速度に関することは触れられていますが、理論だけで言ってしまうと以前よりは確実に遅くなります。 アイコン画像のサイズは 1KB 前後のものが多く ( デフォルトアイコンは 166 バイト ) 、仮にパブリックなはてなブックマーカ 100 人がブックマークしていても、エントリページの総サイズとしてはせいぜい 100KB 程度プラスになるだけ、 ADSL 1.5M 以上の通信環境であればさほど気にならない違いかもしれません。

しかし、パブリックなはてなブックマーカ 100 人がブックマークしているということは、 100 人分のプロフィール画像を表示することになるということで、 100KB の画像 1 枚を表示するのとは少々話が違ってきます。 100 人分のプロフィール画像を表示するということは、単純に 100 回のサーバへのリクエストとサーバからのレスポンスが存在するということです。 LiveHTTPHeaders という Firefox の拡張機能がありますが、これで ( 今この記事を書いている時点でちょうど 100users に近い数である ) はてなブックマーク - はてなダイアリー日記 - プロフィール画像設定機能の追加についてを開いた時の HTTP ヘッダを見てみると、テキストファイルに換算して 105KB というサイズのものが得られました。 「ツール」→「オプション」→「コンテンツ」→「「画像を読み込む」のチェックを外す」という手順でプロフィール画像を読み込まないようにしてもう一度 HTTP ヘッダを取得すると、 10KB というサイズになりました。

----------------------------------------------------------
http://www.hatena.ne.jp/users/pa/partygirl/profile_s.gif

GET /users/pa/partygirl/profile_s.gif HTTP/1.1
Host: www.hatena.ne.jp
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8) Gecko/20051111 Firefox/1.5
Accept: image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/hatenadiary/20060126/1138263309
Cookie: rk=******************************; PORTAL_TAB=quest; name=*******

HTTP/1.x 200 OK
Date: Sat, 28 Jan 2006 05:23:07 GMT
Server: Apache/2.0.40 (Red Hat Linux)
Last-Modified: Fri, 27 Jan 2006 13:58:56 GMT
Etag: "1cc494-3afb-7f800800"
Accept-Ranges: bytes
Content-Length: 15099
Keep-Alive: timeout=7
Connection: Keep-Alive
Content-Type: image/gif

プロフィール画像を読み込む時のリクエストおよびレスポンスの流れは、この例のようなものになっています。 これを 100 回行うために、プロフィール画像がどんなに小さいサイズであれ、全く無かった頃に比べると遅くなるのは不思議なことではありません。

プロフィール画像によって本当に表示が遅くなるのか ? ( 実際のところ )

しかし、実際のところは、多少遅くなっているかもしれませんが、激しく遅くなったと感じるまでには至っていません。 次に挙げるような理由が考えられます。

ブラウザによるキャッシュ機能が働く

はてなのプロフィール画像に限った話ではありませんが、多くのグラフィカルブラウザにはキャッシュ機能があり、以前に読み込んだページの内容や画像をローカルディスク上に保持し、同様のものを表示する際にはそこから表示することで速度を向上しています。

よって、初めて読み込むブックマークページであっても、過去に読み込んだユーザの分のプロフィール画像はキャッシュから表示することになります。 ただし、キャッシュをクリアしていたり、はてなブックマーク自体を初めて見るような場合はこの限りではありません。

サーバによるリバースプロキシ ( 推測 )

これは推測の域を出ませんが、はてなのサーバ側でもプロフィール画像をキャッシュすることで、リクエストの集中が起こらないようになっていると思われます。 また、プロフィール画像自体のパスも http://www.hatena.ne.jp/users/ユーザ ID の頭 2 桁/ユーザ ID/profile_s.gif というように、ユーザ ID で大まかにディレクトリが分けられ、かつそのディレクトリ内でユーザ ID ごとにディレクトリを置き、その中に profile_s.gif を配置していることからも、特定のサーバに負荷が集中しないようになっているのでしょう。

そもそも元が軽快だったので遅く感じる

キャッシュやリバースプロキシの話は、何度もはてなブックマークのページを読み込んでいると表示が遅くなる原因が軽減されるという話であり、それらが有効になっていない、すなわち初見の状態では表示が遅くなるということです。 ( これは前項で述べた通り )

しかしよくよく考えてみると、リンクバナーやアフィリエイトバナーが羅列されているページでは、サイズとしてもリクエスト・レスポンスの頻度としてもはてなブックマークより大きい・多いものが数多く存在しています。

最初にキャッシュするときにブラウザが重くなる人も居るかもしれないが。 それは見たことが無いサイトのバナーを表示するのと同じぐらいの重さだろう。 (だけどブックマークはいままでのスピードを知っている。 だから、今回の改造を体感で比較することができた。 二回目からのアクセスではキャッシュされているからスピードは変わらないだろう)

これは import otsune from Hatena - コスメティック(見た目)の改造は、内部的にたいしたことをしてなくても大げさに見えるんだなぁからの引用ですが、 だけどブックマークはいままでのスピードを知っている という下りに非常に納得がいきました。 また、子供、いらない:はてブのアイコンは問題ないでは実際に速度計測を行った結果が記されています。 これを見る限り、余程多くのブックマーカがブックマークしているページでなければ実サイズとしては気にするレベルではないのかなと思います。

簡単に言うと「今までと全く同じってわけではないけど、様々な機能や対策のおかげで気にするほどは遅くならないはず」という感じでしょうか。 それを踏まえて、次項からはプロフィール画像を非表示にする方法を考えてみましょう。

Firefox の拡張機能 "Adblock Plus" で非表示にする

子供、いらない:はてブのアイコンは問題ないで紹介されている手法です。 単純に「ツール」→「オプション」→「コンテンツ」→「「画像を読み込む」のチェックを外す」という手順で画像を読み込まないようにしても良いのですが、これだとそれ以外のページでも画像を読み込まなくなってしまいます。 そこで、はてなのプロフィール画像は http://www.hatena.ne.jp/users/ユーザ ID の頭 2 桁/ユーザ ID/profile_s.gif というパスに置かれており、画像ファイル名は profile_s.gif に固定されているため、 Adblock という Firefox の拡張機能で profile_s.gif をブロックしてしまおうという考え方です。

なお、使い方は詳述しません。 インストール後に、「ツール」→「 Adblock 」→「 Preferences 」で設定画面を開き、 New Filter の欄に profile_s.gif と入力して Add ボタンを押せば完了です。 この方式では profile_s.gif という名前のファイル自体のリクエストを行わないため、表示速度・見た目の両方に有効な方法です。

私は使ったことがありませんが、 Proxomitron-J といったツールでも同様のことが実現できるかもしれません。

なお、 profile_s.gif というフィルタの場合、もしはてな以外でこのファイル名を用いている画像があった場合に、それもブロックしてしまうことになります。 はてなのプロフィール画像だけを正確にブロックしたい場合はベアハグハグ - うざかったら、adblockすればいいのに。に書かれている http://www.hatena.ne.jp/users/* というフィルタを用いた方が良いでしょう。

また、はてなのプロフィール画像全てをブロックしたいわけではなく、特定のユーザの画像だけをブロックしたい場合は ブロックしたいユーザの ID/profile_s.gif というフィルタを用いると良いでしょう。

ユーザ CSS で非表示にする

はてなブックマークのエントリページでは、プロフィール画像を表示する img 要素に対して hatena-id-icon という class が付与されています。 ということは、ユーザ CSS で非表示にすることも比較的容易にできるということです。

img.hatena-id-icon {
  display:  none;
  }

このように userContent.css に記述することで、プロフィール画像を非表示にできます。 ただし、プロフィール画像自体へのリクエストは変わらず行うため、ブックマークしている人数が多い場合や、通信速度が低速の場合に表示が遅くなるかもしれません。 なお、 userContent.css に記述を加える方法は Destroy target="_blank" - 導入前にちょっとした準備で解説しています。

なお、チープカ - はてブコメント欄のアイコンを消す(Firefox限定)ではてなブックマークのエントリページを狙い撃ちで display:none; する CSS が紹介されていますが、Firefox 1.5 限定の方法です。 前項の profile_s.gif ははてな外でもあり得そうな名前ですが、 hatena-id-icon という class が付与された img 要素ははてな外では滅多に無いと思うので、単純に img.hatena-id-icon という class セレクタで充分かと思われます。

ちなみに、 display:none; ではなく visiblity:hidden; でも非表示にすることができますが、 ボックスを不可視にした場合でも,他のボックスは表示されている場合と同様にレイアウトされ るため、 plotless: はてブのユーザアイコンでSafariが激重に!? で紹介されているような、 ( ピクセル的に ) 巨大なサイズのプロフィール画像が存在した場合にはブラウザの動作が遅くなる可能性があります。 ( もっとも、この問題自体は idea:8252 によって対策済みのようですが。 )

Greasemonkey スクリプトで非表示にする

ユーザ CSS と同様にプロフィール画像自体へのリクエストは行ってしまいますが、 Greasemonkey スクリプトで非表示にするという方法もあります。 disableHatenaKey.user.js が同じような結果をもたらすスクリプトだったので、 GPL に基づいて改変してみました。

ただし、 Greasemonkey による実行結果が、 img 要素を <span class="hatena-id-icon"></span> という、内容が空の span 要素に置き換えたものになるため、違う方法で実現した方が良いと思います。

まとめ

私が思いつく限りの方法を羅列してみましたが、お勧めは Adblock Plus で非表示にする方法ですね。 非表示にするだけでなく、画像へのリクエストも行わなくなるので、表示速度もこれまでと変わらないはずです。

参考までに、はてなブックマーク - はてなダイアリー日記 - プロフィール画像設定機能の追加についてをそれぞれの方法で開いた場合の HTTP ヘッダを記録したテキストファイルを置いておきます。 文面だけではプロフィール画像のファイルリクエストを行うのか行わないのか分かり辛いようでしたし。

なお、 Web Developer で Cookie とキャッシュを無効にした状態にして、 LiveHTTPHeadersHTTP ヘッダを記録しました。

デフォルト ( プロフィール画像を表示する )
Adblock Plus で profile_s.gif を非表示
ユーザ CSS で非表示
Greasemonkey スクリプトで非表示

関連リンク集

HTTP ヘッダを見る機能
Adblock Plus で非表示
ユーザ CSS で非表示
はてなキーワード
はてなアイデア
プロフィール画像設定機能の追加について
id:Hebi さんによるまとめ

リプライ

2 件のリプライが送られています。

2006-01-28T21:25+09:00 - かつを

うちでも、Adblock Plusでprofile_s.gifを非表示にしています。 # 厳密には、Hamachiya2/profile_s.gifだけですが あと、CSSでimg.hatena-id-iconに display:noneを付加しても、画像の読み込みは行わないってことは、ないんでしょうか? # 名前通り、描画しないだけ?

2006-01-30T23:01+09:00 - 真琴

display:none; でも、画像自体へのリクエストは行いますよ。と書いていたつもりがちょっと言葉足らずでしたね……。 それぞれの場合の HTTP ヘッダを記録した .txt ファイルを追記として置いてみましたので、比較してみてください。

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など