キャッシュ
こんにちは。Gem-one adITの権蔵です。
本日は、「キャッシュ」の話をご紹介。
キャッシュ?
そもそもキャッシュとはなんですか?という話ですが、ざっくり言ってしまえば
エコ機能
です。
- 一度訊いた内容は、二度も訊かない
- 経験した結果を覚えておく
などなどを、キャッシュという言葉で表すことが多いです。
どうして、それがエコなの?
というお話になるかもしれませんが、こう考えてください。
- 104で電話番号を問い合わせお客様に電話をかけた。次に電話をかける時もNTTに訊く
- 雪道をヒールで歩いたらずっこけた。明くる日も雪道をヒールで歩いたらずっこけた
そんな二度手間や、経験は無駄でしょう。
システムの中でも、こいった「無駄」を省くような作りを考えることがあります。
一番なじみが深いのは、このような「キャッシュ」の機能でしょう。
一度みたホームページを再度見に行ったら、表示が早かった
そんなことありませんでしたか?
キャッシュ機能によって、表示速度があがっています。
「ブラウザでURLを指定しホームページを表示させる」という手順は、実は内部ではこのようなこと繰り返しています。
1)ブラウザがWebサーバへホームページの情報を求める
2)Webサーバがブラウザにホームページの情報を差し出す
この処理を何回も繰り返し、ブラウザにホームページが表示されます。
さてさて。ここで問題です。
ホームページは、毎秒ごとに変更されるでしょうか?
特に、ブログなどを考えてみてください。
いかがでしょうか?変わりませんでしょ?
ホームページというのは、案外「変わらないデータ」が多いんです。そのことを利用し、ブラウザは問い合わせを減らします。
AさんがブラウザにURLを指定して、ホームページを見ようとしました。
さぁ、賢いブラウザは、こう考えました。
「あ、ここのURLはさっき見たから、さっきWebサーバに訊いた結果(キャッシュ)を表示してあげよう」
ホームページをWebサーバにきかずに画面表示させます。Webサーバへ問い合わせをしない分、速攻表示となるわけです。
キャッシュは誰が得をする?
さてさて、先ほど「ブラウザがキャッシュを使って表示速度をあげた」例をみてみましょう。
このキャッシュという機能を行うと、誰が得をしたか考えてみます。
1)ブラウザ利用者
が筆頭にあがると思いますが、もう何人かいるのは分かりますか?
たとえば、
2)Webサーバ
3)他のインターネット回線利用者
:
皆さん、得してます。
Webサーバは、基本的には「同じことを聞かれたからって手を省きません」。むやみやたらに聞かれなければ、他の処理に当たれますよね。得します。
他のインターネット回線利用者も得をします。ネット回線はAさんだけが使っているわけではないからです。BさんもCさんも使っています。3人が使っていれば、単純に3等分の回線幅ですが、Aさんがあまり使わなければ、BさんCさんがその分を使えるわけですよね。
こうしてみると、キャッシュというのは、沢山の「メリット」がありそうです。
デメリット
メリットばかりを強調していますが、デメリットもあります。
つまるところ、Aさんのブラウザがキャッシュを使っている間、Webサーバに「現状」を聞かないということです。
聞かない分、速度があがりましたが、その分「リアルタイムな情報を聞いてない」わけです。
通常の処理ですと、ブラウザは「ある程度の時間がたったら、キャッシュをクリアーして、Webサーバに聞きに行く」という処理を行っていますので、このデメリットは出にくく設計されてはいるんですけどね。
ただ、キャッシュはしっかりきくもの。
ですので、このキャッシュ処理をブラウザが行うという理解を確り把握していないSEさんなりプログラマさんは、大抵、痛い思いをしていますね。
リアルタイム情報をみせたいのに、「ブラウザのキャッシュ」が働いて、「リアルタイムな情報」を要求してこないわけですのでね。
ただ、困ったことに、全部が全部、キャッシュされないようにするのも困る。
タイトルロゴマークなどの画像は、変わっても1年に1回とかですからね。
ややこしいですかね。
そういったことを考えながら、Web設計をしていくのが、いわゆるシステムを作る人たちのお役目ですね。
キャッシュ
ITの世界では、キャッシュという言葉が至るところに出てきます。
ネットワークの色々な技術の中でもキャッシュ機能がありますし、今回ご紹介したブラウザの中にもあります。
結構単純な「技術」なのですが、「単純」だからこそ効果が出やすい技術です。
次回は、少しシステマティックなキャッシュ構造をご紹介しようと思います。
ミドルウェア(キャッシュサーバ)による3層構造設計です。
お楽しみに!