如何在WordPress网站上诊断高Admin-Ajax使用率

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

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

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

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

准备好出发?让我们开始吧!

什么是admin-ajx.php文件?

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

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

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

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

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

屏幕。

在MyKinsta仪表板中检查Ajax使用情况

在MyKinsta仪表板中检查Ajax使用情况

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

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

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

您也可以使用Chrome DevTools查看发送到admin-ajax.php的请求数。您还可以查看“网络”部分下的“时间”标签,以了解处理这些请求所花费的时间。

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

Ajax提供了许多主要的WordPress功能…但是,当有太多请求进入时,它也会大大降低您的网站速度。?在此处了解如何解决此问题并优化您的Ajax使用率?单击鸣叫
如何在WordPress上调试高admin-ajax.php使用率

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

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

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

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

WordPress.org存储库中由Ajax驱动的插件

WordPress.org存储库中由Ajax驱动的插件

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

使用WordPress,我们的流量增长了1,187%。
我们将向您展示如何。

加入20,000多个其他人,他们每周都会收到有关WordPress内部技巧的新闻!

现在订阅

成功!感谢您的订阅

您将在一周内收到下一期的Kinsta新闻通讯。

订阅Kinsta新闻通讯

订阅

我同意条款和条件以及隐私政策

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

WebPageTest报告中的admin-ajax.php请求

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

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

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

GTmetrix报告表明严重的admin-ajax.php使用高峰

GTmetrix报告表明严重的admin-ajax.php使用高峰

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

您还可以使用GTmetrix来挖掘各个帖子和响应数据。您可以使用此功能来查明是什么原因导致了问题。

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

POST admin-ajax.php请求的标头数据

POST admin-ajax.php请求的标头数据

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

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

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

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

快速搜索此线索将带您进入ThemeFusion的网站,该网站是Avada主题的创建者。因此,您可以得出结论,该请求源自主题或与其捆绑在一起的任何插件。

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

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

在GTmetrix中测试另一个缓慢的网站导致使用Visual Composer页面构建器和Notification Bar插件发现类似问题。

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

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

POST admin-ajax.php请求的发布数据

POST admin-ajax.php请求的发布数据

值得庆幸的是,如果您无法解决该插件的问题,那么您最喜欢有许多可供选择的替代插件供您试用。例如,对于页面构建器,您还可以尝试Beaver Builder或Elementor。

如何确定高级admin-ajax.php的来源

有时,速度测试报告中显示的“发布和响应”数据可能不那么清晰直接。在这里,找到高admin-ajax.php用法的来源并不是那么容易。在这种情况下,您始终可以按照旧的方式进行操作。

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

提示:使用暂存环境(例如Kinsta的暂存环境)是在您的站点上运行测试而不影响实际站点的好方法。在临时环境中确定原因并解决问题后,可以将更改推送到实际站点。

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

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

默认情况下,Heartbeat API每15秒轮询admin-ajax.php文件以自动保存帖子或页面。如果您使用共享主机服务器,则您没有太多专用于站点的服务器资源。如果您正在编辑帖子或页面,并且在很长一段时间内都未打开选项卡,那么它可能会堆积很多Admin Ajax请求。

厌倦了您的WordPress网站出现问题?通过Kinsta获得最好,最快的托管支持!查看我们的计划

例如,当您撰写或编辑帖子时,一个用户一个小时就能产生240个请求!

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

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

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

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

他们一天只接待了2,000位唯一身份访问者,就收到了4,100多个admin-ajax.php电话。要求访问的比率很低。

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

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

Kinsta的团队注意到/ wp-admin引荐来源网址,并正确确定了根本原因。这些要求归功于DARTDrones的管理员和编辑人员经常在展会现场更新网站。

WordPress早已部分修复了此Heartbeat API问题。例如,您可以减少心跳API在资源有限的主机上生成请求的频率。一小时不使用键盘/鼠标/触摸后,它也会自动挂起。

使用心跳控制插件减少Ajax请求

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

心跳控制插件

心跳控制插件

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

心跳控制插件的“常规设置”仪表板

心跳控制插件的“常规设置”仪表板

如果服务器的CPU资源有限,建议您在WordPress仪表板和Frontend上均禁用心跳。您还可以为“后期编辑器”选项修改心跳频率,并将其增加到30秒(甚至60秒)。频率越高,所用服务器资源的节省就越大。

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

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

DDoS攻击或垃圾邮件机器人使您的网站不堪重负,也可能导致admin-ajax.php使用率很高。但是,这种攻击不一定以增加的Admin Ajax请求为目标。这只是附带损害。

如果您的站点受到DDoS攻击,那么您的首要任务应该是将其置于强大的CDN / WAF(如Cloudflare或Sucuri)之后。Kinsta的每个托管计划还包括Kinsta CDN,它可以帮助您在很大程度上减轻网站资源的负担。

要了解有关如何保护您的网站免遭此类恶意攻击的更多信息,可以参考我们有关如何阻止DDoS攻击的深入指南。

如果您看到服务器和网站的速度变慢,则可能是由于Ajax请求过多所致。准备使用本指南进行诊断和修复!单击以发布
摘要

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

在本文中,您了解了admin-ajax.php使用率较高的各种原因,如何诊断导致此症状的原因,以及如何解决该问题。在大多数情况下,遵循本指南可以使您的网站立即恢复正常运行。

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

如果您仍在WordPress网站上仍在高使用admin-ajax.php的情况下挣扎,请在评论部分告诉我们。

如果您喜欢这篇文章,那么您会喜欢Kinsta的WordPress托管平台。加速您的网站并获得我们经验丰富的WordPress团队的24/7支持。我们基于Google Cloud的基础架构专注于自动扩展,性能和安全性。让我们向您展示Kinsta的与众不同!查看我们的计划

相关文章