PHP HTTP头部

3

我有几个问题想问一下。

HTTP头文件是否会缓存页面上的所有内容?如果我有一些JavaScript文件,它们是否也会被缓存以供后续页面使用,还是情况比这更加复杂。例如:如果我在page1.php中缓存了所有JavaScript文件,那么这些文件是否仍将被缓存在page2.php中,或者page1.php中缓存文件只适用于page1.php。

另一个问题是...

我应该放弃HTTP头文件,只使用APC吗?如果是这样,这有多复杂,或者实际上可以同时使用两者(因为yslow建议使用HTTP头文件)。感谢任何信息,我一直在阅读,但这些问题在文本中没有得到很好的回答。


我不确定你在说什么,但是缓存文件可以通过将它们放在外部的*.js文件中,并让Web服务器处理来实现。 - merkuro
2个回答

4
如果您只是提供常规的 .js 文件,那么您的 Web 服务器将为您处理缓存。第一次从您的页面链接到 .js 文件时,这些文件将被下载。当用户重新加载该页面或导航至使用相同 .js 文件的其他页面时,浏览器将使用缓存副本。如果您通过 <script src="code.js"></script> 标签加载脚本,则适用此规则。
如果您的 JavaScript 代码嵌入在 PHP 脚本生成的 HTML 中,情况就不同了。
<script type="text/javascript">
  alert("Hello world!");
</script>

每次加载您的.php文件时,这些脚本都会被重新生成。如果您想缓存PHP脚本的输出,则需要通过从您的PHP脚本设置适当的HTTP标头来管理缓存,可以使用Cache-Control系列标头或If-Modified-SinceETag样式标头。

通常情况下,缓存和PHP文件并不经常一起使用,因为您通常会生成根据用户输入、时间、cookies等动态更改的内容。由于缓存纯粹是一种优化,所以普遍的编程警告是不要过早进行优化。如果您搞砸了您的HTTP标头,可能会给自己带来很多麻烦(相信我!)。作为一个经验法则,您可以让Apache或IIS处理这样的高级HTTP事务,并只在有特定需要时才涉足HTTP标头。


谢谢你的回答。接下来的问题是,你知道一个好的图像缓存资源吗? - Kauthon
图片缓存方面怎么样? - John Kugelman
其他情况也可能导致页面重新加载,谢谢。 - Kauthon
嗯,我认为你应该发布一个关于那个的新问题。那听起来像是一个更加复杂的问题。 - John Kugelman

1

我认为你混淆了不同类型的缓存。你在这里谈论了3或4个非常不同的事情。

  1. 浏览器缓存 -- 任何正常的浏览器都会在页面之间缓存图像、JS文件和CSS文件。这意味着,当浏览器第二次想要显示您网站上的任何特定图像时,它将从本地磁盘缓存中加载它,而不是再次返回您的服务器获取它。所有这些都只是发生了 -- 不要去搞它,它就能正常工作。(例外情况:浏览用户已关闭缓存,您已更改标头以避免缓存,您的mime.types没有正确设置,因此浏览器无法正确处理这些文件。)

  2. 服务器端内容缓存 -- 如果您的页面在服务器端渲染速度较慢,您可以使用各种磁盘和RAM缓存方案来保留输出,并防止服务器每次都需要重新渲染每个页面。这仅适用于相当静态的站点或页面的静态部分。

  3. APC内容缓存 -- APC具有命令,可让您将任意内容放入服务器端RAM缓存中。如果系统的某个部分需要很长时间才能渲染,但可以被许多服务器请求重复使用,则这是一个不错的选择。

  4. APC代码缓存 -- 您的文本PHP脚本被“伪编译”,然后发送到PHP运行时进行执行。这个“伪编译”阶段可能非常慢且多余,因此APC将“伪编译”的PHP阶段缓存在RAM中。它可以轻松地加速整个网站。

如果说得有点太多了,抱歉。


没有错,你说的很完美。我之前有些混淆了,但现在明白了。再次感谢你的完美解释,我已经阅读了很多资料,但没有人能像你这样讲得那么清楚。 - Kauthon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接