靜態緩存:它是什麼以及它是如何工作的
已發表: 2022-06-30緩存策略很棘手,因此我們的支持經理 Ryan Belisle 花了一些時間來解釋一種使用靜態緩存來提供更快站點的方法。
繼續閱讀以了解:
- 什麼是緩存靜態內容?
- 靜態緩存的好處。
- 靜態緩存的限制。
- 如何實現靜態緩存。
- 如何禁用靜態緩存。
在電子商務中,沒有什麼比為促銷活動付費並看著它閃閃發光更悲慘的了,只是看到你的網站在你最好的時刻崩潰和燃燒。 有時,促銷活動超出了您的預期,而您的積極措施還不夠。 然後怎樣呢?
在最後一刻從您的站點中擠出更多性能的一種策略是一種稱為靜態緩存的方法。
小心! 我們不建議採取最後一刻的方法來處理預期的網絡流量高峰。 這適用於您已經應用優化基礎架構或應用程序的最佳實踐,並且您的營銷結果超出任何預期的情況。
什麼是緩存靜態內容?
雖然有多種形式的緩存可用,但靜態緩存是一種將用戶請求生成的頁面轉換為 HTML 文檔以服務於同一頁面的任何後續請求的方法。
與服務器本身解釋站點代碼、查詢數據庫並將 HTML 文檔返回給客戶並最終加載頁面不同,靜態緩存會保存前兩個步驟的單個結果,並將該文檔提供給發出請求的其他任何人.
靜態緩存的好處
雖然基本,靜態緩存可以產生深遠的影響,特別是在以下領域:
- 減少開銷:無需生成 PHP 進程來處理對站點頁面的請求,Web 服務器只需將 HTML 文檔直接返回給靜態緩存頁面上的請求。
- 為所有點擊流量提供“登陸頁面” :而不是為訪問您的主頁或點擊特定 URL 鏈接的任何人花費資源,這默認提供緩存頁面,而不會干擾站點上其他頁面的正常操作.
靜態緩存的限制
但是,我確實想指出,靜態緩存有局限性,通常只能用作臨時解決方案。 記住:
- 靜態緩存就是這樣:靜態的。 對站點所做的任何更改都不會反映在以這種方式緩存的頁面上。
- 諸如“購物車中的物品”之類的信息或存儲在客戶會話文件中的其他數據將不會在這些頁面上起作用。
如何實現靜態緩存
雖然有幾種不同的方法可以實現靜態緩存,但以下是手動完成的基本步驟:
1. 使用 SSH 登錄您的服務器。
2. 在您的 webroot 中創建一個單獨的目錄來存儲靜態緩存中使用的 HTML 文檔。
3. 使用 cURL 或 Wget 向目標頁面發出請求,並將它們存儲在各自 URI 名稱(索引、產品等)下的目錄中
4. 在 .htaccess 文件的頂部添加重寫以將請求重定向到靜態緩存文件,如下所示:
[代碼]
RewriteCond %{REQUEST_URI} ^/?example_category$ [NC]
RewriteRule .* https://www.domain.tld/static/example_category.html [R=302,L]
[/代碼]
或者,您也可以編寫一個腳本來處理此過程。 下面的示例允許您創建一個文件,每行都有一個單獨的 URL。 然後將讀取這些 URL 以生成您的靜態緩存:
[代碼語言=“bash”]
#!/bin/bash
# 基本參數驗證
如果 [ “$#” -ne 2 ]; 然後
echo -e “必須將兩個參數傳遞給腳本。\n\n用法:./nexcess_static_cache_helper.sh domain url_list_file\n”
1號出口
菲
# 獲取有關域的一些數據
域名=$1
pages_file=$2
# 在當前目錄下為靜態頁面創建目錄
cache_dir=./static_cache
如果 ! [[ -d $cache_dir ]]; 然後
mkdir $cache_dir
菲
# 將靜態頁面下載到 HTML 文件中
URL_list=$(cat $pages_file)
$URL_list 中的 URL; 做
request_uri=$(echo $URL | cut -d/ -f 4-)
如果 [[ -z “$request_uri” ]]; 然後
緩存頁面名稱=“索引”
request_uri=”/”
別的
cache_page_name=$(echo $request_uri | perl -pe 's,/|\.,_,g')
菲
wget -q $URL -O $cache_dir/$cache_page_name.html
回顯“$request_uri $cache_page_name”>> $HOME/temp_url.file
完畢
# 為 htaccess 格式化一個塊
迴聲 -e “########”
echo -e “# START: 在 $(date) 生成的靜態緩存 URL 重寫”
迴聲 -e “########”
echo -e “重寫引擎開啟”
貓 $HOME/temp_url.file | 讀取uri頁面時; 做
迴聲“RewriteCond %{REQUEST_URI} ^/?${uri}$ [NC]\n”
echo “RewriteRule .* https://www.${domain}/static_cache/$page [R=302,L]\n”
完畢
迴聲 -e “######”
echo -e “# END: 在 $(date) 生成的靜態緩存 URL 重寫”
迴聲 -e “######”
rm $HOME/temp_url.file
[/代碼]

要使用上述腳本:
1. 導航到您網站的 webroot,然後創建一個名為 cache_list.txt 的文件,或者任何您喜歡的文件。
2. 打開文件。 為每個需要靜態緩存的頁面添加 URL,為每個 URL 條目使用一個新行。 這應該如下所示:
[代碼]
https://www.example.com/
https://www.example.com/sale
https://www.example.com/products
[/代碼]
保存文件,然後使用上述腳本創建一個文件,並將其保存為nexcess_static_cache_helper.sh或您喜歡的任何名稱。
使文件可執行:
[code]chmod +x nexcess_static_cache_helper.sh[/code]
準備就緒後,運行腳本,但使用您自己的文件名和實際域名替換:
[code]./nexcess_static_cache_helper.sh example.com cache_list.txt[/code]
這將在您的 webroot 下創建一個 static_cache 目錄,其中包含要用於靜態緩存的 HTML 文檔。 此外,您的終端將顯示類似於以下內容的輸出:
[代碼]
########
# 開始:2017 年 9 月 18 日星期一 15:49:11 EDT 生成的靜態緩存 URL 重寫
########
重寫引擎開啟
RewriteCond %{REQUEST_URI} ^/?/$ [NC]\n
RewriteRule .* https://www.example.com/static_cache/index [R=302,L]\n
RewriteCond %{REQUEST_URI} ^/?sale$ [NC]\n
RewriteRule .* https://www.example.com/static_cache/sale [R=302,L]\n
RewriteCond %{REQUEST_URI} ^/?products$ [NC]\n
RewriteRule .* https://www.example.com/static_cache/products [R=302,L]\n
######
# END:2017 年 9 月 18 日星期一 15:49:11 EDT 生成的靜態緩存 URL 重寫
######
[/代碼]
複製上面的塊並將其粘貼到站點的 .htaccess 文件的頂部,該文件通常應該在您的當前目錄中。
現在應該啟用靜態緩存。 本著良好的內務管理精神,刪除我們在前面步驟中生成的文件:
[code]rm nexcess_static_cache_helper.sh cache_list.txt[/code]
如何禁用靜態緩存
要禁用靜態緩存,請刪除放置在 .htaccess 文件中的代碼塊。
此外,如果您需要重新生成文件,請再次運行腳本,它將用較新的版本替換 HTML 文檔。 我建議也替換 .htaccess 代碼塊,只是為了更新時間戳以供將來參考。
現在你知道了
如前所述,這只是一種臨時方法,不應用作您的主要性能優化策略。 對於長期解決方案,請查看我們的優化指南、實施 CDN 或聯繫我們的支持團隊以探索其他選項,例如託管 Magento、WooCommerce 或 WordPress。
或者,查看 Nexcess 的託管 WordPress 軟件包,了解如何優化站點的性能。