0

我只是想知道通过 php include 加载的文件是否被浏览器缓存(我的预期行为)

我试图找出一种更好的方法来设计我的模板引擎..

我一直使用 php 包含页眉、页脚等。用于模板

但现在考虑回到使用dreamweaver模板w/c基本上编写每个网页w/完整的文档代码(包括页眉、页脚和所有),并且在更新页眉部分时,Dreamweaver重写所有使用的页面上述模板。

我曾经认为这是一种粗略的、不成熟的模板制作方式,但现在我意识到它真的很聪明……没有更多的包含和其他过程,只是提供大部分所需视觉数据的普通旧页面。我“认为”这比 apache 必须为每个包含运行更多线程要快。并且页面被完全缓存..

像第二次访问 home.php 将导致最小的带宽成本。与 php 包含,如果没有缓存,则必须在每次访问时在浏览器中一次又一次地发送,例如 header.php 数据。

此外,DW 模板实际上使我更容易编码/设计,其中 php 包含通常在可视视图/工具中呈现

就是想...

PS 作为背景,我实际上使用了带 PHP 模板的 DW 模板(一种使用 DW 的混合方式).. 我对这种方法非常满意,并发现它非常简单.. 因此我对 DW 或 PHP 模板都不是很陌生。

4

2 回答 2

5

PHPinclude与浏览器无关,浏览器不知道服务器上包含任何内容。浏览器看到的只是一个长长的 HTTP 文档,不管它是如何在服务器上组装的。浏览器会缓存它。

您想要的是缓存文档服务器端,因此不必在每个请求上重新组装。

         SERVER SIDE                   CLIENT

+-----------+     +--------+   |    +---------+
|           |     |        |   |    |         |
|    PHP    | --> | Apache | --|--> | browser |
|           |     |        |   |    |         |
+-----------+     +--------+   |    +---------+

      ^                ^                 ^
      |                |                 |
include happens     document         sees only
    here          already fully     complete HTML
                 assembled here   document regardless
于 2013-07-01T06:02:05.527 回答
2

要知道,页面是如何生成的,对于浏览器来说并不重要。您可以使用 PHP、Python、Java、Ruby 或其他语言 - 它只是无关紧要。Apache 服务器(如果是 PHP)解析脚本并将生成的 HTML 页面返回给浏览器。默认情况下,它由浏览器缓存 - 除非您使用 pragma<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">向浏览器指示不应缓存该页面。

当您在 HTML 而不是脚本中存储和提供页面时,它只会为您节省解析阶段,从而节省服务器上的资源并且通常更快。这就是为什么大多数开发的 Web 框架都包含生成、存储和提供解析页面的能力,而不是“原始”脚本。典型的场景是在 PHP 中检查页面是否被修改。如果已修改,则重新生成页面;如果不是 - 提供 HTML 而不是脚本。您还可以将此方案基于超时。它在页面生成需要从数据库中获取大量不经常更改的信息的部分 Web 应用程序中特别有用。例如,在产品或产品类别列表较长的页面上 - 在分别添加新产品或产品类别时更新页面。

因此,“模板化”(实际上是提供页面的完全解析版本而不是其脚本原始版本)可以节省您的服务器资源和页面交付时间,而不是浏览器请求。

于 2013-07-01T06:12:56.500 回答