全頁緩存——速度的需要

已發表: 2020-10-02
speed - Full-Page Caching - The Need For Speed -

網站緩存和整頁緩存是加快網站加載時間的技術。 這是一種非常普遍的做法,幾乎無處不在,因為它為網站性能帶來了巨大的收益。 緩存通過使網絡服務器更有效地完成其工作而起作用。 全頁緩存是一種更高級的緩存形式,因此要了解全頁緩存,讓我們從普通緩存開始並從那裡構建。

Joe's Auto-Parts Shop – 一個靜態網站

1 - Full-Page Caching - The Need For Speed -

想像一下喬。 他是一個擁有並經營著一個裝滿汽車零件的大型倉庫的人。 在倉庫的前面是一個櫃檯,顧客來這裡購買他的零件。 當客戶到達購買一些零件時,交易遵循以下程序:

  1. 顧客遞給喬一份汽車零件清單。
  2. 喬取出第一部分放在櫃檯上。
  3. 喬取出第二部分放在櫃檯上。
  4. 依此類推,直到列表結束。
  5. 顧客付錢離開。

那麼這如何適用於靜態網站呢?

靜態網站是不使用任何數據庫、PHP 腳本或任何其他程序的網站。 想像一個只有 HTML 頁面和圖像的簡單網站。 Joe 和他的倉庫代表這個簡單網站的各個部分,如下所示:

  • 倉庫是物理服務器。
  • Joe 是網絡服務器軟件,例如 Apache
  • 汽車零件是構成網站的文件,例如圖像和 HTML 文件。

為這個簡單站點提供服務的過程是:

  1. 瀏覽器從服務器上運行的 Apache 請求網頁。
  2. Apache 從磁盤讀取第一個文件並將其發送到瀏覽器。
  3. Apache 從磁盤讀取第二個文件並將其發送到瀏覽器。
  4. 依此類推,直到它獲取所有內容。
  5. 瀏覽器顯示完成的網頁。

這種設置適用於小型網站,但在壓力下很快就會失敗。

喬變得很忙——緩存節省了一天

2 - Full-Page Caching - The Need For Speed -

喬的系統運行良好,直到他開始忙碌。 事實上,他太忙了,大部分時間都花在從櫃檯走進倉庫,以至於他無法跟上所有新客戶的步伐。

喬可以購買一個額外的倉庫並僱用其他人在那里工作以滿足額外的需求。 但這代價高昂,並不能最大限度地利用他已經擁有的資源。 相反,Joe 考慮如何在他擁有的倉庫中提高流程效率。

Joe 意識到,他為客戶獲取的 90% 的零件都是僅有的 10 個零件之一。因此,他決定將這 10 個零件放在櫃檯下,以便在有人要時可以立即拿走。 他現在可以直接從櫃檯處理大多數客戶的請求,而無需進入倉庫。 這要快得多。

緩存在網絡服務器上做了非常相似的事情。 就像 Joe 回到倉庫一樣,提供靜態文件時最慢的操作是從存儲設備加載文件。 緩存的作用是將最頻繁請求的文件保存在 RAM 中,它們的訪問速度比從存儲中讀取它們的速度快數千倍。

這種類型的緩存適用於圖像和其他靜態文件,但 WordPress 是一個帶有 PHP 腳本和數據庫的動態網站。

輸入整頁緩存。

喬的生活變得複雜——PHP、數據庫和緩存

joe - Full-Page Caching - The Need For Speed -

與喬在同一個城鎮開設了一家新的豐田車間,他們使用喬來提供備件。 這對喬來說很好,除了一個問題,豐田只按他們的豐田零件號訂購零件。 他們給了喬一個巨大的目錄,這樣他就可以在收到他們的訂單時查找豐田零件編號並將它們與倉庫中的零件相匹配。

但這讓喬又慢了下來。

每當他必須在目錄中查找豐田零件時,他都需要很長時間。 即使它是櫃檯下的零件之一,他也不能隨便拿,因為他首先必須在目錄中查找豐田零件號。 他將 10 個最需要的部件放在櫃檯下的舊系統仍然有幫助,但新的目錄查找現在是最大的瓶頸。

喬又想了想,想出了一個解決辦法。 他注意到大多數豐田訂單是少數幾個訂單中的一個。 因此,他寫出了最常見的豐田零件編號及其相應零件的備忘單,然後將其粘貼在工作檯面上。

現在他不需要為大部分豐田訂單使用目錄,他可以瀏覽備忘單,幾乎立即將豐田零件編號轉換為他可以獲取的零件。

WordPress 網站與 Joe 有類似的問題。 WordPress 在瀏覽器請求時構建每個網頁。 您的瀏覽器加載的 HTML 頁面在您向 WordPress 請求它們之前不存在。

這就是 WordPress 創建網站頁面的方式:

  1. 瀏覽器從 WordPress 請求網頁。
  2. PHP 腳本接受請求並查詢數據庫以獲取構建頁面所需的內容。
  3. 數據庫查找並將所有信息返回給 PHP 進程。
  4. PHP 腳本使用該信息構建頁面並將其發送到瀏覽器。

這是很多工作,也是非緩存 WordPress 網站需要比靜態網站多很多倍的計算機資源的原因。

就像 Joe 一樣,您的 WordPress 網站經常收到對相同頁面的請求,例如您網站的登錄頁面,因為每次新訪問者到達時都會提供此頁面。 在非緩存設置中,WordPress 必須使用 PHP 腳本處理此請求並為每個訪問者進行數據庫查詢,即使它每次都創建完全相同的頁面。

這導致了大量的重複工作。

全頁緩存解決了這個問題。 它注意到某個請求和生成的頁面始終相同,因此它將頁面的副本緩存在 RAM 中。 它還保留了創建這些頁面的請求的備忘單,因此當訪問者請求它在直接從 RAM 提供它之前生成的頁面時,而不是重新創建它。

通過繞過許多 PHP 進程和數據庫查找以及直接從 RAM 提供先前生成的頁面,這顯著減少了 Web 服務器的工作量。 這可以為您提供一個幾乎與靜態網站一樣高效的動態 WordPress 網站。

緩存和整頁緩存是一流的技術,它們利用您的網絡服務器的資源來最大化您的網絡服務器的效率,並為您提供一個活潑的 WordPress 網站。