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

时间:2013-07-01 05:59:25

标签: php templates caching

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

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

我总是使用php包含页眉,页脚等等来进行模板化

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

我曾经认为这是一种粗暴的,无懈可击的做模板的方式,但现在我意识到'它真的非常聪明......没有更多的内容和其他过程,只是简单的旧页面提供大部分所需的视觉效果数据。我“认为”这比apache必须为每个include运行更多线程更快。并且页面完全缓存..

喜欢访问home.php,第二次将带来最小的带宽成本.. VS php include,如果不是CACHED,必须在每次访问时一次又一次地在浏览器中发送header.php数据。

此外,DW模板实际上使我更容易编码/设计,其中php包含通常在visiual views / tools中呈现

只是想知道......

PS 作为背景资料,我实际上使用了DW模板与PHP模板(使用DW的混合方式)。我已经非常舒服w /这种方法,发现它真的很直接..因此我不是对DW或PHP模板真的很陌生。

2 个答案:

答案 0 :(得分:5)

PHP include与浏览器无关,浏览器不知道服务器上包含的任何内容。所有浏览器都看到的是一个很长的HTTP文档,无论它是如何在服务器上组装的。浏览器会将它全部缓存。

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

         SERVER SIDE                   CLIENT

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

      ^                ^                 ^
      |                |                 |
include happens     document         sees only
    here          already fully     complete HTML
                 assembled here   document regardless

答案 1 :(得分:2)

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

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

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