静态缓存:它是什么以及它是如何工作的
已发表: 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 软件包,了解如何优化站点的性能。