如何诊断WordPress站点Admin-Ajax使用率过高问题插图

Ajax是一种基于JavaScript的Web技术,可帮助您构建动态和交互式网站。WordPress使用Ajax为其许多核心管理区域功能提供支持,例如自动保存文章、用户会话管理和通知。

默认情况下,WordPress通过admin-ajax.php位于站点/wp-admin目录中的文件引导所有Ajax调用。

大量同时发生的Ajax请求可能会导致高admin-ajax.php使用率,从而导致服务器和网站的速度大大降低。这是许多未优化的WordPress网站面临的最常见问题之一。通常,它表现为网站缓慢或HTTP 5xx错误(主要是504或502错误)。

在本文中,您将了解WordPress的admin-ajax.php文件、它的工作原理、它的优点和缺点,以及如何诊断和修复高admin-ajax.php使用率问题。

  1. admin-ajax.php文件是什么?
  2. 如何在WordPress上诊断admin-ajax.php高频使用问题

admin-ajax.php文件是什么?

admin-ajax.php文件包含在WordPress上路由Ajax请求的所有代码。它的主要目的是使用Ajax在客户端和服务器之间建立连接。WordPress使用它来刷新页面内容而无需重新加载,从而使其动态且与用户交互。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图1

Admin Ajax如何在WordPress上工作的基本概述

由于WordPress核心已经使用Ajax为其各种后端功能提供支持,因此您可以使用相同的功能在WordPress上使用Ajax。您需要做的就是注册一个操作,将其指向您站点的admin-ajax.php文件,并定义您希望它如何返回值。您可以将其设置为返回HTML、JSON甚至XML。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图2

WordPress中的admin-ajax.php文件

根据WordPress Trac,admin-ajax.php文件首次出现在WordPress 2.1中。它在WordPress开发社区中也称为Ajax Admin

 

如何诊断WordPress站点Admin-Ajax使用率过高问题插图3

检查Ajax使用情况

上面的图表只显示了admin-ajax.php请求的数量,而不是它们可能来自哪里。这是查看峰值何时发生的好方法。您可以将其与本文中提到的其他技术结合使用,以缩小主要原因。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图4

在Chrome DevTools中检查admin-ajax.php请求的数量

您还可以使用Chrome DevTools查看有多少请求被发送到admin-ajax.php. 您还可以查看“Network部分下的“Timings选项卡,了解处理这些请求所需的时间。

至于admin-ajax.php高使用率背后的确切原因,主要有两个主要原因:一是前端,二是后端。我们将在下面讨论两者。

如何在WordPress上诊断admin-ajax.php高频率使用问题

第三方插件是admin-ajax.php使用率高的最常见原因之一。通常,此问题会出现在站点的前端,并经常出现在速度测试报告中。

但是插件并不是这里唯一的罪魁祸首,因为主题、WordPress 核心、网络服务器和DDoS攻击也可能是Admin Ajax使用率高的原因。

让我们更详细地探索它们。

如何确定插件和主题的admin-ajax.php使用率高的来源

如何诊断WordPress站点Admin-Ajax使用率过高问题插图5

WordPress.org插件库中的Ajax驱动插件

WordPress开发人员经常使用Ajax来创建动态和交互式插件和主题。一些流行的示例包括添加实时搜索、产品过滤器、无限滚动、动态购物车和聊天框等功能。

仅仅因为插件使用Ajax并不意味着它会减慢您的站点的速度。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图6

在WebPageTest报告中查看admin-ajax.php请求

通常,Admin Ajax在页面加载结束时加载。此外,您可以将Ajax请求设置为异步加载,因此它对用户感知的页面性能几乎没有影响。

正如您在上面的WebPageTest报告中看到的admin-ajax.php,在请求队列的末尾加载,但它仍然需要780毫秒。仅一个请求就需要很多时间。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图7

GTmetrix报告表明admin-ajax.php使用率严重飙升

当开发人员没有在WordPress上正确实现Ajax时,可能会导致严重的性能问题。上面的GTmetrix报告就是这种行为的一个完美例子。

您还可以使用GTmetrix来挖掘单个文章和响应数据。您可以使用此功能查明导致问题的原因。

为此,请转到GTmetrix报告的Waterfall选项卡,然后找到并单击POST admin-ajax.php项。您将看到此请求的三个选项卡:标题、发布和响应。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图8

POST admin-ajax.php请求的Headers数据

查看请求的PostResponse选项卡将为您提供一些提示,以找出性能问题背后的原因。对于此站点,您可以在“Response”选项卡中看到线索。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图9

POST admin-ajax.php请求的响应数据

您可以看到响应的一部分与id设置为“fusion-form-nonce-656”的输入标签有关。

快速搜索这条线索将带您到ThemeFusion的网站,Avada主题的创建者。因此,您可以得出结论,该请求来自主题,或者与它捆绑的任何插件。

在这种情况下,您必须首先确保Avada主题及其所有相关插件已完全更新。如果这不能解决问题,那么您可以尝试禁用主题,看看是否可以解决问题。

与禁用插件不同,在大多数情况下禁用主题是不可行的。因此,尝试优化主题以消除任何瓶颈。您还可以联系主题的支持团队,看看他们是否可以提出更好的解决方案。

在GTmetrix中测试另一个慢速网站导致发现与Visual Composer页面构建器和通知栏插件类似的问题。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图10

另一个POST admin-ajax.php请求的响应数据

如何诊断WordPress站点Admin-Ajax使用率过高问题插图11

POST admin-ajax.php请求的Post数据

值得庆幸的是,如果您无法解决插件的问题,您最喜欢有许多可供尝试的替代插件。例如,当涉及到页面构建器时,您还可以尝试使用Beaver Builder或Elementor。

如何确定admin-ajax.php高使用率的来源

有时,速度测试报告中显示的Post和Response数据可能并不那么清晰和直接。在这里,找到高admin-ajax.php使用率的来源并不容易。在这种情况下,你总是可以用老派的方式来做。

禁用您网站的所有插件,清除您网站的缓存(如果有),然后再次运行速度测试。如果admin-ajax.php仍然存在,那么最有可能的罪魁祸首是主题。但是如果找不到,那么你必须一个一个地激活每个插件并每次运行速度测试。通过消除过程,您将锁定问题的根源。

使用admin-ajax.php诊断后端服务器问题

admin-ajax.php高使用率的第二个最常见原因是WordPress Heartbeat API生成频繁的Ajax调用,导致服务器上的CPU使用率高。通常,这是由于许多用户登录到WordPress后端仪表盘造成的。因此,您不会在速度测试中看到这一点。

默认情况下,Heartbeat API的admin-ajax.php每15秒轮询一次文件以自动保存文章或页面。如果您使用的是共享托管服务器,那么您的站点专用的服务器资源并不多。如果您正在编辑帖子或页面并长时间打开选项卡,则可能会产生大量Admin Ajax请求。

例如,当您撰写或编辑文章时,仅一个用户就可以在一小时内生成240个请求!

如何诊断WordPress站点Admin-Ajax使用率过高问题插图12

频繁自动保存admin-ajax.php请求

后端有很多请求,只有一个用户。现在想象一个有多个编辑器同时登录的站点。这样的站点可以快速增加Ajax请求,从而产生高CPU 使用率。

DARTDRones扩展其WooCommerce网站以在Shark Tank上露面时实际上遇到了这个问题。

他们的admin-ajax.php在一天内接到了4,100多个电话,只有2,000名独立访客。这是一个微弱的请求访问比率。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图13

dartdrones.com上大量使用admin-ajax.php

我们注意到/wp-admin引用URL并正确确定了根本原因。这些请求是由于DARTDRones的管理员和编辑经常更新网站以期待节目的播出。

WordPress很久以前就部分修复了这个Heartbeat API问题。例如,您可以在资源有限的主机上减少Heartbeat API生成的请求频率。它还会在键盘/鼠标/触摸不活动一小时后自行暂停。

使用Heartbeat Control Plugin减少Ajax请求

您可以使用WP Rocket的Heartbeat Control插件轻松解决此问题。它允许您只需点击几下即可禁用或修改Heartbeat API的频率。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图14

Heartbeat Control插件

安装并激活Heartbeat Control插件后,您可以在WordPress仪表盘、站点前端和文章编辑器上管理Heartbeat API的频率。

如何诊断WordPress站点Admin-Ajax使用率过高问题插图15

Heartbeat Control插件的“常规设置”仪表盘

如果您的服务器CPU资源有限,我建议您在WordPress仪表板和前端都Disable Heartbeat。您还可以修改“文章编辑器”选项的Heartbeat频率并将其增加到30秒(甚至60秒)。频率越高,使用的服务器资源节省的越多。

您必须使用的确切设置因站点而异。如果您不确定要使用什么,您可以咨询您的Web开发人员。

由于DDoS攻击或垃圾邮件机器人导致的高流量

用DDoS攻击或垃圾邮件机器人淹没您的网站也会导致高admin-ajax.php使用率。但是,此类攻击不一定针对增加的Admin Ajax请求。这只是附带损害。

如果您的站点受到DDoS攻击,您的首要任务应该是将其置于强大的CDN/WAF之后,例如Cloudflare或Sucuri。

要详细了解如何保护您的网站免受此类恶意攻击,您可以参考我们关于如何阻止DDoS攻击的深入指南。

小结

WordPress在其Heartbeat API中使用Ajax来实现其许多核心功能。但是,如果使用不当,它可能会导致加载时间增加。这通常是由于对文件的高频率请求造成的admin-ajax.php

在本文中,您了解了高admin-ajax.php使用率的各种原因、如何诊断导致此症状的原因以及如何修复它。在大多数情况下,遵循本指南应该可以让您的网站立即恢复并顺利运行。

但是,在某些情况下,升级到具有更高资源的服务器是唯一可行的解​​决方案。特别是对于要求苛刻的用例,例如电子商务和会员网站。如果您正在运行这样的站点,请考虑升级到在处理这些类型的性能问题方面经验丰富的托管WordPress主机。