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
使用率问题。
- admin-ajax.php文件是什么?
- 如何在WordPress上诊断admin-ajax.php高频使用问题
admin-ajax.php文件是什么?
admin-ajax.php
文件包含在WordPress上路由Ajax请求的所有代码。它的主要目的是使用Ajax在客户端和服务器之间建立连接。WordPress使用它来刷新页面内容而无需重新加载,从而使其动态且与用户交互。
Admin Ajax如何在WordPress上工作的基本概述
由于WordPress核心已经使用Ajax为其各种后端功能提供支持,因此您可以使用相同的功能在WordPress上使用Ajax。您需要做的就是注册一个操作,将其指向您站点的admin-ajax.php
文件,并定义您希望它如何返回值。您可以将其设置为返回HTML、JSON甚至XML。
WordPress中的admin-ajax.php文件
根据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 核心、网络服务器和DDoS攻击也可能是Admin Ajax使用率高的原因。
让我们更详细地探索它们。
如何确定插件和主题的admin-ajax.php使用率高的来源
WordPress.org插件库中的Ajax驱动插件
WordPress开发人员经常使用Ajax来创建动态和交互式插件和主题。一些流行的示例包括添加实时搜索、产品过滤器、无限滚动、动态购物车和聊天框等功能。
仅仅因为插件使用Ajax并不意味着它会减慢您的站点的速度。
在WebPageTest报告中查看admin-ajax.php请求
通常,Admin Ajax在页面加载结束时加载。此外,您可以将Ajax请求设置为异步加载,因此它对用户感知的页面性能几乎没有影响。
正如您在上面的WebPageTest报告中看到的admin-ajax.php
,在请求队列的末尾加载,但它仍然需要780毫秒。仅一个请求就需要很多时间。
GTmetrix报告表明admin-ajax.php使用率严重飙升
当开发人员没有在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数据
值得庆幸的是,如果您无法解决插件的问题,您最喜欢有许多可供尝试的替代插件。例如,当涉及到页面构建器时,您还可以尝试使用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个请求!
频繁自动保存admin-ajax.php请求
后端有很多请求,只有一个用户。现在想象一个有多个编辑器同时登录的站点。这样的站点可以快速增加Ajax请求,从而产生高CPU 使用率。
DARTDRones扩展其WooCommerce网站以在Shark Tank上露面时实际上遇到了这个问题。
他们的admin-ajax.php
在一天内接到了4,100多个电话,只有2,000名独立访客。这是一个微弱的请求访问比率。
dartdrones.com上大量使用admin-ajax.php
我们注意到/wp-admin引用URL并正确确定了根本原因。这些请求是由于DARTDRones的管理员和编辑经常更新网站以期待节目的播出。
WordPress很久以前就部分修复了这个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主机。