缓慢的 WordPress 用户查询超过 7000 个用户

Posted

技术标签:

【中文标题】缓慢的 WordPress 用户查询超过 7000 个用户【英文标题】:Slow WordPress User Query(s) Over 7000 users 【发布时间】:2014-12-28 17:56:00 【问题描述】:

我几乎完成了 WordPress 网站的构建,但启动后的主要问题是执行用户查询需要很长时间。

我已经在浏览器、php 和 gziping 以及使用 W3 Total 缓存插件中启用了缓存,并尝试了其他各种缓存插件,但都取得了一定的成功。

在 php.ini 和 wp-config 中也提高了超时时间和内存。

我遇到问题的主页是http://www.qbhitlist.com/qbhitlist/quarterbacks/,但主页和其他两个排名页面也很慢。

http://www.qbhitlist.com/qbhitlist/rankings/qbhl-top-50/ http://www.qbhitlist.com/qbhitlist/rankings/qbhl-premium-player-rankings/

我明白为什么(查询超过 7000 位用户),但我知道没有办法绕过。

那么有没有办法在页面加载后将主查询保存到 json 文件、全局数组或延迟加载查询?或任何其他会大大减少页面加载时间/提高性能的解决方案。

任何建议将不胜感激。

【问题讨论】:

查询不慢。收集和返回输出甚至都不慢。 (嗯,3 秒,它并不快,但这是一个 4.9 MB 的 html 文档。)客户端处理它很慢。 (对我来说 18 秒。)无论您在服务器端做什么以使其更快,您都需要一些智能客户端。 (就像不是一次下载和处理所有记录。) 你有解决方案吗? 我不知道 WP,所以不知道。我建议仅加载您正在显示的数据。 WP 必须有寻呼机。 【参考方案1】:

你做错了。您不应该像那样一次将所有数据转储到一个页面上。

即使您必须减少加载时间并使网站上线,一旦并发用户数量增加,您将不得不对数据库进行许多查询。我的猜测是数据库不会处理这样的流量。

尝试将查询保存在您可以更好地控制的中间表中,并以位为单位获取数据。显示前 50 个项目,然后链接到接下来的 50 个项目,使用 ajax 或不使用 ajax 的常规分页,加载时间会降低,网站上线时不会出现问题。

【讨论】:

我不太确定该怎么做...这是我的代码。 pastebin.com/QuzKNWyq 这里是修改后的代码pastebin.com/EZifuEfz,几行代码会让页面加载更快,也会更优雅。看一下codex.wordpress.org/Class_Reference/WP_User_Query#Who_Parameter,以便了解需要从数据库中过滤出会员资格的情况。 这有点用,但会破坏数据表。我能够让 ajax 工作,但现在它将所有播放器加载到同一页面上。我似乎使用了正确的选项来设置页面长度,甚至设置了一个选项以仅在 json 数组中显示 100 个总玩家。然而,它拉动了所有这些。对此有何建议? pastebin.com/byMtYEz1 非常感谢任何帮助【参考方案2】:

您可以将 html 存储在瞬态中。将过期时间设置为 0 并在每次更新列表时以编程方式删除瞬态,以便重新生成它。

示例代码:

function get_qb_list() 

    $qb_list = get_transient( 'qb_list' );

    if( false === $qb_list ) 

        $qb_list = 'HTML GOES HERE';

        set_transient( 'qb_list', $qb_list, 0 );
    

    return $qb_list;


瞬态存储在 wp 选项表中。阅读有关瞬态 API here 的更多信息。

【讨论】:

谢谢你试试这个。

以上是关于缓慢的 WordPress 用户查询超过 7000 个用户的主要内容,如果未能解决你的问题,请参考以下文章

加速(缓慢的)巨大的 wordpress 数据库

Harmony OS 2 和pokertime129263同时升级了超过了7000万用户,争取年底用户过亿

Harmony OS 2 和pokertime129263同时升级了超过了7000万用户,争取年底用户过亿

Harmony OS 2 和pokertime129263同时升级了超过了7000万用户,争取年底用户过亿

用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询

Postgres 运行缓慢的删除查询