【发布时间】:2019-02-04 09:51:22
【问题描述】:
我正在考虑这样动态生成我的网站文件的静态版本,以提高性能。
所以 index.html 文件(在我的服务器上的 .html 文件由 PHP 解析)在用户请求文件时执行此操作:
使用 file_get_contents() 请求自身。这将获取用户看到的 HTML。
将自身 (index.html) 重命名为 index.html.orig 并将刚刚检索到的 HTML 写入新的 index.html 文件。
因此,将来对 index.html 的请求会获取(现在)静态 index.html,而动态 index.html.orig 会放在那里以备不时之需。
如果我需要重新缓存它,我只需删除静态 index.html 文件并将 index.html.orig 文件重命名回 index.html(很快就会有人再次请求并重新缓存它。
说实话,我认为我的网站不够忙,不足以保证这样做,但我很无聊。
我也可以在每个静态文件的顶部放置一个这样的 sn-p:
<?php
header('Cache-Control: public,private,max-age=604800'):
header('Last-Modified: ...'):
header('Expires: ...'):
?>
【问题讨论】:
-
您只能根据
$_GET和$_POST要求进行缓存,例如,如果您有一个返回结果的搜索,则必须 A. 不缓存该结果或 B. 将请求包含为可以用来拉取缓存文件的东西。 -
已经有一些非常好的方法可以缓存 PHP 文件的最终结果。 Checkout PHP OPcache、PHP APC 和 Memcached ...它们都提供了轻松缓存页面、设置失效时间和自动查询字符串区分的解决方案。
-
但是使用这种方法 PHP 根本不会出现在图片中(如果我没有添加那些 header() 调用)。那不是更好吗?编辑另外,除了在我的主机上使用 .htaccess 文件之外,我无法更改服务器。
-
老实说,凭借现代计算机和宽带的性能,在大多数情况下,您通常可以将其优化到不需要缓存的程度。良好的基准测试和正确使用数据库索引可以大有帮助。
-
完全替代地,如果您只想在您的站点上使用
.html文件,为什么不尝试使用JavaScript / React 静态站点生成器,例如GatsbyJS?完成后,它会将您的所有页面转换为 .html 文件。我可以保证最终产品通常会快速发光!