【问题标题】:The best way to implement the function for open/close label实现打开/关闭标签功能的最佳方式
【发布时间】:2019-10-05 19:01:04
【问题描述】:

我有一个 WordPress 列表页面,其中列出了 200 家商店,所以我有 PHP 函数,它根据工作时间显示打开/关闭标签:

$status = open_close_status($restaurant_id);
<span class="restaurant-status <?php echo $status; ?>"><?php echo $status; ?></span>

问题是标签被缓存并且即使页面被重新加载也保持不变。实现这样一个功能以使 PHP 保持动态的最佳方法是什么?只需要从缓存中排除这段代码,但应该缓存页面的其余部分。

【问题讨论】:

  • 缓存在哪里?您是否安装了某种 WordPress 缓存?
  • 是的,它的 wp-fastest-cache
  • 关闭后是否有效?
  • 有一个选项可以从缓存中排除页面,当我启用它时它可以工作但加载速度很慢,因为它会阻止整个页面被缓存
  • 找出它慢的原因。也许是查询。

标签: javascript php mysql wordpress


【解决方案1】:

具有动态内容的页面不应该被服务器缓存,或者应该每五分钟左右由服务器(可能是 cron 作业)更新它们的缓存。听起来您有查询问题。也许在某个时间点后延迟加载任何餐厅,并确保您没有使用元查询。

然而,要解决您的问题,您需要使用 JavaScript 动态更新状态,特别是 AJAX。请查看WP's AJAX Documentation,快速了解其工作原理。

基本上你只需要用&lt;span class="restaurant-status" data-restaurant-id="&lt;?php echo $restaurant_id;"&gt;&lt;/span&gt; 替换你的状态HTML/PHP。然后从那里您可以使用 JavaScript 抓取并循环遍历所有餐厅状态,并将 ID 传递给您的 open_close_status 函数(确保将它们添加到 wp_ajax_nopriv_ 操作挂钩,修改类,并更改内部文本.

也就是说,我仍然认为您应该首先解决您的页面缓慢问题,而不是服务器缓存。延迟加载,确保图像被压缩,不严重依赖缓慢/臃肿的插件等。WordPress 应该能够非常快速地吐出 10、50、100 甚至 200 个帖子。 (作为轶事证据,我有一个我正在开发的网站,帖子表中有 400,000 条记录,35,000 条是“公司”,350,000 条是“评论”,所有这些都相互关联,它可以吐出 250 家公司他们的评论不到半秒。)

【讨论】:

  • Xhynk 谢谢你的详细回复。我正在使用 get_post_meta() 函数从 mysql 中检索数据。我还实现了延迟加载、压缩图像,但仍有 TTFB 3.9 秒。我考虑过 AJAX,但想象一下每个用户有 200 或 400 个请求,或者它可以吗?
  • "350,000 条是“评论”,都是相互关联的,它可以在不到半秒的时间内吐出 250 家公司及其评论。"可能你一直在使用专用计划,但我的是云
  • 如果您使用基于元数据的帖子,请不要这样做。默认情况下,元值在数据库中未编入索引,导致它们非常慢。尝试将您的查询更改为仅获取 200 家餐厅而不依赖元数据。我敢打赌,如果不是更好的话,你可以让你的 TTFB 低于 1.5 秒。您可以尝试在您的 meta_value 列上添加一个小索引,但您可能最好使用已经被索引的其他东西,例如分类术语而不是发布元数据。
  • @Xhynk,抱歉重播晚了,非常感谢您的帮助,我会尝试更改查询格式,如果有效,请告诉您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2010-11-18
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多