Cache me outside
緩存是一種優化網頁加載時間并優化其使用的記憶體量的持久化機制。
Cache 的定義
出于篇幅限制,本文重點介紹 Web 緩存。 當您加載網站時,網站資料(如圖像、視訊和 html 文檔)将被儲存。 重新加載網站後,它不會調用資料庫再次擷取該資料。 它隻是将資料從記憶體中讀取。
緩存以容量換取速度,緩存通常會暫時存儲資料的子集,而資料庫的資料通常是完整且持久的。
Client Side Caching
用戶端緩存通常稱為浏覽器緩存,盡管用戶端緩存是一個稍微寬泛的術語。其運作原理如下圖所示:
一旦浏覽器從伺服器請求資料,它就會将其存儲到浏覽器建立的檔案夾中。 下次打開網頁時,它不會調用伺服器擷取資料,而是從浏覽器緩存檔案夾中提取資料。
Server Side Caching
伺服器端緩存是一個類似的概念,但稍微複雜一些。
一旦使用者向網站送出請求,其資料就會存儲在伺服器上。 下次使用者送出請求時,它隻需從伺服器取回儲存的資料,無需從資料庫中提取資料,進而節省時間。
這些緩存由站點管理者實作,充當浏覽器和源伺服器之間的中介。 它們通常也基于 HTTP 緩存指令。
Remote Caching
遠端緩存類似于伺服器端緩存,但它也可以運作應用程式來序列化和反序列化資料。 不同之處在于您可以控制遠端伺服器,而不是由其他人操作。
通常通過應用程式代碼或使用可以利用記憶體中資料存儲的應用程式架構來檢索 Web 内容。
Server-Side vs Remote vs Client Side
主要差別在于網站的資料在本地儲存在用戶端緩存中,而在伺服器端緩存中可以分發給所有使用者,而在遠端中,資料也得到處理。
大多數精心設計的網站或應用程式将同時使用伺服器端和用戶端。
Why caching?
通過減少後端資源的負載和網絡擁塞,緩存 Web 内容有助于提高網站的響應能力。 - AWS
Downside
如果您嘗試通路的網站已更新,則在清除緩存之前您可能看不到更新。 這可能發生在您之前,特别是如果您是一名 Web 開發人員并且您正在嘗試更新您網站的設計。 如果緩存存儲在您的用戶端,解決方案很簡單。
這适用于用戶端緩存,如果伺服器端緩存沒有正确處理這種情況,可能會在伺服器端緩存上傳回錯誤。
如果您使用遠端緩存,它可以處理該錯誤并為您清除緩存并為您加載新請求。
簡而言之,client side cache:
您的網絡浏覽器(Chrome、Firefox、Safari 或任何您使用的浏覽器)決定記住網頁的外觀,是以不必再次請求伺服器發送網頁。 這通過消除幾乎整個網絡通信來節省時間(和帶寬)。 但是,如果伺服器決定更改網頁的外觀,您就會遇到麻煩,因為浏覽器對它認為頁面應該是什麼樣子的“記憶”現在已經過時了,它會給您一個舊版本的頁面而不是新的。 這就是為什麼人們有時會告訴您“清除浏覽器緩存” - 這會迫使您的浏覽器“忘記”頁面的外觀。 這迫使它向伺服器詢問頁面的新的、更新的版本。
server side cache:
負責生成網頁(即,将網頁放在一起)的伺服器決定記住網頁的外觀,是以不必再次生成它。 這節省了時間(但不是帶寬),因為現在伺服器不必經曆建構整個頁面的麻煩——它可以重新發送上次浏覽器請求時發送的任何内容。 但是,如果網頁上的任何資料需要更改,伺服器将被迫丢棄其對頁面外觀的“記憶”,并需要重新生成頁面。 如果頁面真的很複雜并且需要很多時間來生成,這種緩存很有用。