【问题标题】:Replacing dynamic PHP files with static HTML files for better performance用静态 HTML 文件替换动态 PHP 文件以获得更好的性能
【发布时间】:2019-02-04 09:51:22
【问题描述】:

我正在考虑这样动态生成我的网站文件的静态版本,以提高性能。

所以 index.html 文件(在我的服务器上的 .html 文件由 PHP 解析)在用户请求文件时执行此操作:

  1. 使用 file_get_contents() 请求自身。这将获取用户看到的 HTML。

  2. 将自身 (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 OPcachePHP APCMemcached ...它们都提供了轻松缓存页面、设置失效时间和自动查询字符串区分的解决方案。
  • 但是使用这种方法 PHP 根本不会出现在图片中(如果我没有添加那些 header() 调用)。那不是更好吗?编辑另外,除了在我的主机上使用 .htaccess 文件之外,我无法更改服务器。
  • 老实说,凭借现代计算机和宽带的性能,在大多数情况下,您通常可以将其优化到不需要缓存的程度。良好的基准测试和正确使用数据库索引可以大有帮助。
  • 完全替代地,如果您只想在您的站点上使用.html 文件,为什么不尝试使用JavaScript / React 静态站点生成器,例如GatsbyJS?完成后,它会将您的所有页面转换为 .html 文件。我可以保证最终产品通常会快速发光!

标签: php html caching


【解决方案1】:

您可以将文件设为index.php,并将网络服务器设置为在index.php 之前先查找index.html。这样在index.php 中,您可以使用ob_start()ob_get_flush() 之类的内容来输出文件的内容,但也可以将其保存在字符串中,以便将其保存到index.html。未来的请求只会加载 HTML 版本。

【讨论】:

  • 那么,如果用户只点击 html 文件,为什么还要有一个 index.php 文件呢?您将如何处理 index.html 刷新?谁做的?
  • 这似乎是他要问的。如果他想重新生成,他将删除index.html 并将index.html.orig 重命名为index.html。我觉得这会更容易,因为他所要做的就是删除 index.html 并且下一个请求将重新生成缓存版本。
  • 好吧,这是有道理的。
猜你喜欢
  • 1970-01-01
  • 2018-09-03
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多