启用缓存会影响动态内容吗?
例如,在我的一个PHP站点上,缓存标头设置为:
Cache-Control: public, max-age=21600
这是否也会影响动态内容?
如果是这样,那么缓存动态PHP站点的标准方法是什么?据推测,您可以缓存静态内容(例如图像),但不缓存动态内容(例如html,文本等)。你将如何以及在哪里实现这一目标?
答案 0 :(得分:3)
是。答案是肯定的。这可以控制浏览器和一些ISP缓存。它会在您在许多位置指定的时间内缓存动态内容。不是全部。并非所有浏览器都遵循规则,并非所有ISP都遵循规则。众所周知,AOL曾经忽略了人们的缓存规则,并在奇怪的时间缓存所有内容,导致早期网页上的页面损坏。
在未缓存的动态页面上,您可以使用此值将相对频繁更改的页面设置为缓存10分钟到一小时。对于图像,css,js文件和更长时间的东西。缓存8小时可能太多了,因为它超过1小时,但只会将内容的总点击次数减少7次。
还有其他可能更可靠的缓存内容的方法。您可以查看查询缓存,文件缓存,memcached。所有这些选项也可用于缓存内容以外的内容。他们都会帮助你加快重复行动。
许多数据库,MySQL是事实上的标准,提供查询缓存。这将缓存自上次运行查询以来尚未更新的表的查询结果。非常适合标准化的查找表。非常适合在蓝色月亮中仅更新一次的表格。适用于大约一次,每小时甚至每10分钟更新一次的表格。对于比这更频繁变化的表格,它们将产生有限的节省时间的结果。
这些可用于缓存键/值对信息。它们可以是page_url / page_content或page_list / array_of_pages_in_site或您需要的任何其他键/值对。这就是大多数人最近如何将页面缓存10-60分钟。它们可靠,可在服务器上控制,并可在需要时立即刷新。它们不需要基于时间,如果您的逻辑写得正确,您可以将它们视为查询缓存。只有在更新信息时,才会从缓存中刷新该密钥,然后页面立即更新,否则就会位于缓存中。
这将我们带回标头缓存。即使使用其他缓存,在这里缓存大约10分钟仍然很聪明。其他缓存仍然需要服务器的请求,这可能会降低它的速度。虽然这不会减少很多压力,但会减少压力。并且安装不需要太多精力。
答案 1 :(得分:0)
这个想法是您的网站由资源 [页面,图像,脚本甚至]组成,并且您为每个人提供了过期限制,或者为您修改的元素的缓存无效[例如您在主页上添加了新帖子,或者您编辑了一个条目。
一个常见的解决方案是使用反向代理,例如Varnish,它将非常快速地向客户端提供缓存内容,并且如果内容中的缓存标头发生更改,则会寻找更新的版本。
缓存标头生成器流程取决于您 - you can find some ideas here。