同時使用 Varnish 和瀏覽器記憶體是否有意義?
我對使用 Varnish 時的最佳實踐有點困惑:我看到很多我知道他們正在使用 Varnish 的網站,這些網站都
Cache-Control: no-store, no-cache, must-revalidate
啟動了 HTTP 標頭。他們的網站內容很長一段時間都沒有改變 - 那麼他們為什麼不使用瀏覽器記憶體呢?也許他們想要更好地控制內容,如果他們需要快速更改某些內容,否則瀏覽器記憶體中的內容會過時?所以,基本上我想知道我是否應該利用清漆和瀏覽器記憶體,或者只為網站提供清漆,它提供的內容不會改變?這裡有什麼規則,什麼是“最佳實踐”?通常我會選擇 Varnish 和瀏覽器記憶體,但我看到的上述網站讓我對此感到困惑。
你應該同時使用它們,它們是兩個完全不同的東西。
- 瀏覽器記憶體是您電腦中的記憶體。它的主要目的是保留頻寬,通過使用已經看到/下載的資產來減少延遲。
- 清漆記憶體是託管網站的伺服器上的記憶體。其主要目的是減少伺服器因執行 CPU 密集型腳本(例如 PHP)而造成的壓力
對於記憶體條目/不同的記憶體策略,這兩個記憶體可以具有不同的生命週期,這很好。這取決於您正在記憶體的資源的性質。
頁面 (HTML)
僅僅因為您
Cache-Control: no-store, no-cache, must-revalidate
在檢查網站時看到,例如 viacurl
,並不意味著沒有 Varnish 並且它不會記憶體內容。以 Magento 2 為例。Magento 本身發送:
Cache-Control: max-age=86400, public, s-maxage=86400
這就是Varnish所看到的。因此該頁面將被 Varnish 適當地記憶體 1 天。但是,在 Magento 2 的 Varnish VCL 中,它會
Cache-Control
在退出時進行修改,以確保瀏覽器根本不記憶體。因此,您將看到以下響應:Cache-Control: no-store, no-cache, must-revalidate, max-age=0
為什麼會這樣:
- 為了確保消除 PHP 引擎的繁重工作,Varnish 記憶體頁面並從其記憶體中傳遞它們
- 瀏覽器必須始終獲取新頁面(我們正在談論產品頁面等),因此它們根本不應該記憶體
- 當產品頁面被更新(由管理員)時,Magento 會與 Varnish 對話以清除記憶體頁面。由於顯而易見的原因,它不能對瀏覽器記憶體說“從記憶體中刪除我”,這就是瀏覽器不應該記憶體頁面的原因
靜態資產
在瀏覽器中
您通常希望通過瀏覽器記憶體靜態資產,這就是為什麼對於此類資源,您會看到 Far Future Expires 標頭,如下所示:
Expires: Sat, 03 Aug 2019 14:24:01 GMT Cache-Control: public, max-age=30672000
在清漆
對於這些資源,很多人喜歡配置 Varnish 不記憶體它們。這是因為 PHP 沒有繁重的工作來通過伺服器發出這些文件,因此將它們記憶體在伺服器上毫無意義。特別是考慮到 Varnish 記憶體預設使用 RAM 儲存後端(儘管您可以為靜態文件分區記憶體)。