首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP缓存-如何处理动态菜单?

问PHP缓存-如何处理动态菜单?
EN

Stack Overflow用户
提问于 2013-05-04 05:23:22
回答 1查看 396关注 0票数 0

我开始掌握PHP缓存,我得到了一个想法-缓存整个页面,以提高后续访问的性能等。

我不明白的是,如果页面上有一个可折叠的固定菜单,你会怎么做。因此,一个网站有一个固定的顶部菜单,可以折叠,并通过cookie记住其状态。如果页面被缓存,那么它无疑会忽略折叠的顶部菜单的实际状态。

也许,最上面的菜单应该去掉,但我猜它可能会以某种方式出现。PHP在加载时决定顶部菜单的状态(检测cookie),JS也可以更改顶部菜单(和cookie)的状态。

此外,该站点是响应性的,用户代理检测决定向哪些设备提供jQuery功能(其他设备获得基本的后备)。

显然,我不能只缓存整个页面。

我正在使用Symfony2,如果这有什么区别的话。

EN

回答 1

Stack Overflow用户

发布于 2013-05-05 21:34:34

当涉及到缓存时,您有许多选择,所有这些选项都有其优缺点:

  • ESI:在您提到的评论中,您了解ESI,并且它只能用于呈现页面的一部分。在您的示例中,仅呈现菜单(折叠或不基于cookie)可能是
    • Javascript的一个选项:如果您仅在JS中实现了整个折叠,并且始终与菜单一起交付HTML代码,则可以缓存整个页面,然后让客户端呈现它或不呈现它。您可以省去一些服务器端代码,使has服务器和客户端浏览器的缓存变得更容易,还可以在不重新加载的情况下折叠菜单。
    • ETag:这是最复杂的选项,但它肯定有优势。您可以使用包含cookie状态的散列创建一个ETag。这样,浏览器会询问上一个ETag是否发生了变化,您可以根据特定的ETag属性(例如,折叠状态)生成cookie。如果它改变了,ETags就不匹配,你就会返回“新”页面。如果没有任何更改,则使用缓存的版本。您可以在symfony documentation.
    • Caching层中阅读有关ETags的内容:当然,您也可以了解各种反向缓存代理。它们支持各种缓存方法,可能有一些方法可以处理您的problem.

​

关于你的响应式站点:也许用javascript实现回退和其他东西是可行的。通过这种方式,客户端将完成所有工作,而您的服务器可以为一个更静态的页面提供服务,该页面可以缓存得非常好。

您必须记住,动态页面和缓存是相互排斥的。如果您根据cookie属性、用户代理或ip地址等提供不同的内容,您将遇到缓存问题。您的页面越静态(如果您提供静态页面并通过javascript添加所有动态,则从you服务器的角度来看,该页面是静态的),缓存将工作得越好。这是一种权衡,您很可能不会得到所有内容(高缓存命中率和高度动态的页面)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16367750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档