浏览器缓存php会包含文件吗?(PHP和模板)


Will the browser cache php include files? (PHP and templating)

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

我想找出一个更好的方法来设计我的模板引擎。。

我一直使用php includes作为页眉、页脚等。用于模板化

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

我过去认为这是一种粗糙、愚蠢的模板制作方式,但现在我意识到"这真的很聪明。"。。没有更多的inlcudes和其他过程,只是提供了大部分所需的视觉数据的普通好的旧页面。我"认为"这比apache为每个include运行更多线程要快。并且页面被完全缓存。。

与访问home.php一样,第二次访问将使带宽成本降至最低。。vsphp include,如果不是CACHED,则必须在每次访问时在浏览器中一次又一次地发送,例如header.php数据。

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

只是想知道。。。

PS作为背景,我实际上使用了DW模板和PHP模板(有点像使用DW的混合方式)。。我对这种方法感到很舒服,发现它非常直接。。因此,我对DW或PHP模板并不陌生。

PHP的include与浏览器无关,浏览器不知道服务器上包含了任何内容。浏览器所能看到的只是一个长的HTTP文档,不管它是如何在服务器上组装的。浏览器将对其进行缓存。

您想要的是缓存文档服务器端,这样就不必在每次请求时重新组装它。

         SERVER SIDE                   CLIENT
+-----------+     +--------+   |    +---------+
|           |     |        |   |    |         |
|    PHP    | --> | Apache | --|--> | browser |
|           |     |        |   |    |         |
+-----------+     +--------+   |    +---------+
      ^                ^                 ^
      |                |                 |
include happens     document         sees only
    here          already fully     complete HTML
                 assembled here   document regardless

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

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

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