WordPress菜单的缓存应该针对每个页面吗?

时间:2013-03-09 作者:fischi

简介在优化大型WordPress网站的性能时,我总是考虑缓存网站的某些部分,大多数(当然)是那些需要大量查询/计算的部分。

对于WordPress菜单的缓存,我通常使用一个类似于我发布作为答案的函数here.

此函数检查是否存在包含菜单HTML的瞬态,如果存在,则从瞬态传递HTML。如果不存在,则菜单为build and the transient set。为了保持清洁,我还wp_update_nav_menu 保存菜单后立即清除瞬态,始终保持最新版本可用。

到目前为止还不错

这项技术工作得非常好,可以极大地提高性能,尤其是在菜单包含大量条目的情况下。

问题

现在,在开发这个方法几个月后,我遇到了一个问题,并且因为一开始没有考虑它而感到愚蠢。

不同页面上的菜单不同,具体取决于页面的名称,wp_nav_menu 提供不同的HTML代码。current-menu-item 这样的课程当然也适用于menuitems。

因此,问题是,缓存菜单并为每个特定页面提供正确类的最佳方法是什么?

我考虑了两个版本,它们通过jQuery添加类,这会导致客户端上的计算量增加,从而缓存每个版本的菜单ID 另一方面,如果页面有很多菜单,会导致相当多的数据库负载,但是,我倾向于使用第二个选项。您是否担心将这么多HTML缓存为瞬态?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

对于这个问题没有通用的解决方案:相同的菜单可以在不同的页面上用不同的Walker呈现,或者插件更改某些页面上的菜单。

您可以将脚本扩展到一个未触及的菜单来评估差异,并动态构建必要的JavaScript……并将其缓存到每个页面。

我认为这不值得这么麻烦。正确处理所有边缘案例是一项艰巨的工作,对于没有JavaScript的用户(搜索引擎、未解决的脚本错误等),菜单仍然会有所不同。

结束

相关推荐

Primary and secondary menus

我试图使主菜单上的每个选项卡都链接到次菜单,这样实际上,每个主选项卡都会指向次菜单中的一组选项卡,而不是保持静态。我希望你能帮助我,我不是一个高级WP用户,所以可以使用简单的术语。更新我已经添加了代码,但它已经显示在我的网页和仪表板上,所以我一定是弄错了,所以我将其粘贴在下面,以便您可以看到。我不知道如何找到主弹头,但我想这是我在主弹头上添加的内容。function km_dynamic_secondary_menu_reg() { global $km_nav_menus;