Ajax是一种基于JavaScript的Web技术,可帮助您构建动态和交互式网站。WordPress使用Ajax为其许多核心管理区域功能提供支持,例如自动保存文章、用户会话管理和通知。
默认情况下,WordPress通过admin-ajax.php
位于站点/wp-admin
目录中的文件引导所有Ajax调用。
大量同时发生的Ajax请求可能会导致高admin-ajax.php
使用率,从而导致服务器和网站的速度大大降低。这是许多未优化的WordPress网站面临的最常见问题之一。通常,它表现为网站缓慢或HTTP 5xx错误(主要是根据WordPress Trac,admin-ajax.php文件首次出现在WordPress 2.1中。它在WordPress开发社区中也称为Ajax Admin。
检查Ajax使用情况
上面的图表只显示了admin-ajax.php
请求的数量,而不是它们可能来自哪里。这是查看峰值何时发生的好方法。您可以将其与本文中提到的其他技术结合使用,以缩小主要原因。
在Chrome DevTools中检查admin-ajax.php请求的数量
您还可以使用Chrome DevTools查看有多少请求被发送到admin-ajax.php
. 您还可以查看“Network”部分下的“Timings”选项卡,了解处理这些请求所需的时间。
至于admin-ajax.php
高使用率背后的确切原因,主要有两个主要原因:一是前端,二是后端。我们将在下面讨论两者。
如何在WordPress上诊断admin-ajax.php高频率使用问题
第三方插件是admin-ajax.php使用率高的最常见原因之一。通常,此问题会出现在站点的前端,并经常出现在速度测试报告中。
但是插件并不是这里唯一的罪魁祸首,因为主题、WordPress 核心、在WordPress上正确实现Ajax时,可能会导致严重的性能问题。上面的GTmetrix报告就是这种行为的一个完美例子。
您还可以使用GTmetrix来挖掘单个文章和响应数据。您可以使用此功能查明导致问题的原因。
为此,请转到GTmetrix报告的Waterfall选项卡,然后找到并单击POST admin-ajax.php项。您将看到此请求的三个选项卡:标题、发布和响应。
POST admin-ajax.php请求的Headers数据
查看请求的Post和Response选项卡将为您提供一些提示,以找出性能问题背后的原因。对于此站点,您可以在“Response”选项卡中看到线索。
POST admin-ajax.php请求的响应数据
您可以看到响应的一部分与id设置为“fusion-form-nonce-656”的输入标签有关。
快速搜索这条线索将带您到ThemeFusion的网站,Avada主题的创建者。因此,您可以得出结论,该请求来自主题,或者与它捆绑的任何插件。
在这种情况下,您必须首先确保Avada主题及其所有相关插件已完全更新。如果这不能解决问题,那么您可以尝试禁用主题,看看是否可以解决问题。
与禁用插件不同,在大多数情况下禁用主题是不可行的。因此,尝试优化主题以消除任何瓶颈。您还可以联系主题的支持团队,看看他们是否可以提出更好的解决方案。
在GTmetrix中测试另一个慢速网站导致发现与Visual Composer页面构建器和通知栏插件类似的问题。
另一个POST admin-ajax.php请求的响应数据
POST admin-ajax.php请求的Post数据
值得庆幸的是,如果您无法解决插件的问题,您最喜欢有许多可供尝试的替代插件。例如,当涉及到Heartbeat API问题。例如,您可以在资源有限的主机上减少Heartbeat API生成的请求频率。它还会在键盘/鼠标/触摸不活动一小时后自行暂停。
使用Heartbeat Control Plugin减少Ajax请求
您可以使用WP Rocket的Heartbeat Control插件轻松解决此问题。它允许您只需点击几下即可禁用或修改Heartbeat API的频率。
Heartbeat Control插件
安装并激活Heartbeat Control插件后,您可以在WordPress仪表盘、站点前端和文章编辑器上管理Heartbeat API的频率。
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主机。