フルページキャッシング–スピードの必要性
公開: 2020-10-02
ウェブサイトのキャッシュとフルページのキャッシュは、ウェブサイトの読み込み時間を短縮するための手法です。 これは、Webサイトのパフォーマンスが大幅に向上するため、ほとんどすべての場所で使用される非常に一般的な方法です。 キャッシングは、Webサーバーの仕事をより効率的にすることで機能します。 フルページキャッシングはより高度な形式のキャッシングであるため、フルページキャッシングを理解するために、通常のキャッシングから始めて、そこから構築してみましょう。
Joe's Auto-Parts Shop –静的Webサイト

ジョーを想像してみてください。 彼は自動車部品でいっぱいの大きな倉庫を所有して経営している男です。 倉庫の正面には、顧客が部品を購入するために到着するカウンターがあります。 顧客が部品を購入するために到着すると、トランザクションは次の手順に従います。
- 顧客はジョーに自動車部品のリストを渡します。
 - ジョーは最初の部分をフェッチして、それをカウンターに置きます。
 - ジョーは2番目の部分をフェッチし、それをカウンターに置きます。
 - リストの最後まで続きます。
 - 顧客は支払いをして去ります。
 
では、これは静的なWebサイトにどのように適用されますか?
静的Webサイトとは、データベース、PHPスクリプト、またはその他のプログラムを使用しないWebサイトです。 HTMLページと画像のみの単純なWebサイトを考えてみてください。 ジョーと彼の倉庫は、この単純なWebサイトの一部を次のように表しています。
- ウェアハウスは物理サーバーです。
 - Joeは、ApacheなどのWebサーバーソフトウェアです。
 - 自動車部品は、画像やHTMLファイルなどのWebサイトを構成するファイルです。
 
この単純なサイトを提供するための手順は次のとおりです。
- ブラウザがサーバー上で実行されているApacheにWebページを要求します。
 - Apacheは、ディスクから最初のファイルを読み取り、それをブラウザに送信します。
 - Apacheはディスクから2番目のファイルを読み取り、それをブラウザに送信します。
 - そして、それがすべてをフェッチするまで続きます。
 - ブラウザに完成したWebページが表示されます。
 
この設定は小さなWebサイトでは正常に機能しますが、プレッシャーがかかるとすぐに失敗します。
ジョーは忙しくなります–キャッシングは一日を節約します

ジョーのシステムは、忙しくなり始めるまでうまく機能します。 実際、彼はほとんどの時間をカウンターから倉庫に歩いて行くのに忙しいので、すべての新しい顧客に追いつくことができません。
ジョーは追加の倉庫を購入し、追加の需要を満たすためにそこで働くために他の誰かを雇うことができました。 しかし、これはコストがかかり、彼がすでに持っているリソースを最大化することはできません。 代わりに、ジョーは自分の所有する倉庫で自分のプロセスをより効率的にする方法について考えています。
ジョーは、顧客のためにフェッチしているパーツの90%がわずか10個のパーツの1つであることを認識しています。そこで、ジョーは、誰かが要求したときにすぐにそれらをつかむことができるカウンターの下にそれらの10個のパーツを保持することにしました。 彼は今では、倉庫に足を運ぶことなく、カウンターから直接顧客の要求の大部分に対応できます。 これははるかに高速です。
キャッシングは、Webサーバーで非常によく似た処理を行います。 ジョーが倉庫に戻ったように、静的ファイルを提供するときの最も遅いアクションは、ストレージデバイスからファイルをロードすることです。 キャッシングとは、最も頻繁に要求されるファイルをRAMに保持し、ストレージから読み取るよりも数千倍速くアクセスできるようにすることです。

このタイプのキャッシュは画像やその他の静的ファイルに最適ですが、WordPressはPHPスクリプトとデータベースを備えた動的なWebサイトです。
フルページキャッシュを入力します。
ジョーの人生は複雑になります– PHP、データベース、およびキャッシング

ジョーと同じ町に新しいトヨタのワークショップが開かれ、彼らはジョーを使ってスペアパーツを供給します。 これは、1つの問題を除いて、ジョーにとっては素晴らしいことです。トヨタは、トヨタの部品番号で部品を注文するだけです。 彼らはジョーに巨大なカタログを提供するので、彼はトヨタの部品番号を調べて、注文を受けるたびに倉庫内の部品と照合することができます。
しかし、これによりジョーは再び遅くなります。
彼がカタログでトヨタの部分を調べなければならないときはいつでも、それは彼に長い時間がかかります。 たとえそれがカウンターの下の部品の1つであるとしても、彼は最初にカタログでトヨタの部品番号を調べなければならないので、彼はそれを手に入れることができません。 最もリクエストの多い10個のパーツをカウンターの下に置くという彼の古いシステムはまだ役立っていますが、新しいカタログ検索は今や大きなボトルネックになっています。
ジョーはこれについてもう一度考え、解決策を考え出します。 彼は、トヨタの注文のほとんどが小さなグループの1つであることに気づきました。 そこで彼は、トヨタの最も一般的な部品番号とそれに対応する部品のチートシートを書き、それをカウンタートップにテープで貼り付けます。
現在、彼はほとんどのトヨタの注文にカタログを使用する必要はありません。虎の巻を一瞥して、トヨタの部品番号をほぼ瞬時に取得できる部品に変換できます。
WordPressサイトにはJoeと同様の問題があります。 WordPressは、ブラウザから要求されたときにすべてのWebページを作成します。 ブラウザがロードするHTMLページは、WordPressに要求するまで存在しません。
これは、WordPressがサイトのページを作成する方法です。
- ブラウザがWordPressにWebページを要求します。
 - PHPスクリプトはリクエストを受け入れ、ページを構築するために必要なものをデータベースに照会します。
 - データベースは検索し、すべての情報をPHPプロセスに返します。
 - PHPスクリプトは、その情報を使用してページを作成し、それをブラウザーに送信します。
 
これは多くの作業であり、キャッシュされていないWordPressWebサイトが静的Webサイトの何倍ものコンピューターリソースを必要とする理由です。
ジョーと同じように、WordPressサイトは、新しい訪問者が到着するたびにこのページが配信されるため、サイトのランディングページなど、同じページのリクエストを頻繁に受け取ります。 キャッシュ以外の設定では、WordPressはPHPスクリプトを使用してこのリクエストを処理し、毎回まったく同じページを作成する場合でも、すべての訪問者に対してデータベースクエリを実行する必要があります。
これにより、大量の重複作業が発生します。
フルページキャッシュはこの問題を解決します。 特定のリクエストと生成されるページは常に同じであるため、ページのコピーをRAMにキャッシュします。 また、それらのページを作成したリクエストのチートシートを保持しているため、訪問者がページを再作成するのではなく、RAMから直接提供する前に生成したページをリクエストした場合。
これにより、多くのPHPプロセスとデータベースルックアップをバイパスし、以前に生成されたページをRAMから直接提供することにより、Webサーバーのワークロードが大幅に削減されます。 これにより、静的なWebサイトとほぼ同じくらい効率的な動的なWordPressWebサイトを提供できます。
キャッシングとフルページキャッシングは、Webサーバーのリソースを活用して、Webサーバーの効率を最大化し、スッキリとしたWordPressサイトを提供する優れたテクノロジーです。
