WordPress Heartbeat(心跳) API 已经存在了将近十年。它提供了 WordPress 仪表板和主机服务器之间的无缝实时通信。Heartbeat API 内置于 WordPress 核心,提供强大的功能,可以显着改善网站管理体验。
然而,这种力量是有代价的。它是保持通信顺畅运行所需的服务器资源数量。运行资源密集型网站或让您的托管服务提供商对内存和 CPU 时间施加严格限制可能会导致明显的性能下降,而 Heartbeat API 可能会发挥作用。
在本指南中,我们将揭示 WordPress Heartbeat API 的潜力及其在 WordPress 生态系统中的作用。您将了解 Heartbeat API 的工作原理。您还将了解为什么您可能需要考虑限制其在您的 WordPress 网站上的活动。这将帮助您获得更好的性能,而无需升级您的托管计划。
什么是 WordPress Heartbeat API?
WordPress Heartbeat API 是内置于 WordPress 核心的接口,可实现服务器和 WordPress 仪表板之间的实时通信。Heartbeat API 于 2013 年随 WordPress 3.6 的发布首次引入。它对内容管理和网站管理的其他关键领域进行了重大改进。
为什么 Heartbeat API 如此重要?
WordPress 仪表板主要是一个客户端应用程序。这意味着大部分操作发生在用户的浏览器中。作为前端应用程序,WordPress 管理区域无法直接访问存储网站内容和其他关键信息的WordPress 数据库。
为了正常运行,WordPress 仪表板需要能够与服务器通信以发送和接收数据。WordPress Heartbeat API 等应用程序编程接口 (API) 使实时接收更新成为可能,而无需重新加载整个页面来显示任何新信息。
为了提供无缝的用户体验,WordPress 仪表板向后台服务器发送请求的频率足以消除已登录并在网站上工作的 WordPress 用户的任何更新延迟。Heartbeat API 将每 15 到 120 秒向服务器发送请求和 API 调用。
WordPress Heartbeat API 的三个主要功能
WordPress Heartbeat API 提供三个关键功能,使网站管理更加轻松便捷。这些功能是自动保存、内容锁定和实时仪表板通知。它们对于有多个用户同时登录和活动的社区或协作编辑的网站尤为重要。
1. 自动保存和修订
自动保存和修订是 WordPress Heartbeat API 提供的主要功能之一。每当用户在块编辑器中工作时,WordPress 每 60 秒执行一次内容自动保存。这确保没有任何更改未保存。通过每分钟向服务器发送请求,WordPress Heartbeat API 将帖子或页面的工作副本保存到其数据库中,该副本将存储在那里,直到运行新的自动保存。
由 Heartbeat API 提供支持的 WordPress 自动保存非常有用。它们可以在浏览器崩溃或连接问题时防止数据丢失。自动保存不会替换用户创建的任何修订,也不会累积在数据库中。
2.内容锁定
内容锁定是 WordPress Heartbeat API 的另一个功能,可以为 WordPress 网站所有者提供更好的编辑体验。如果当前正在编辑帖子或页面,WordPress 将锁定它以防止其他用户对其进行更改。WordPress Heartbeat API 将每 15 秒向服务器发送一次请求。如果另一个用户打开锁定的内容进行编辑,它将显示一条通知。
3.实时仪表板通知
WordPress Heartbeat API 支持实时仪表板通知,包括由插件发送的通知。Heartbeat API 提供的客户端-服务器通信的可靠性已导致成千上万的 WordPress 插件开发人员将其集成到他们的应用程序中。
网站管理区域中 WordPress Heartbeat API 调用的默认间隔为 15 秒。希望使用 API 功能的插件开发人员可以配置自定义间隔,以便在客户端应用程序和服务器之间交换数据。
WordPress Heartbeat API 如何工作?
WordPress Heartbeat API 使用 AJAX(异步 JavaScript 和 XML)从管理仪表板与服务器通信。应用程序编程接口收集数据并通过所谓的 jQuery 事件发送数据。admin-ajax 处理程序接收数据并在服务器端处理它,随后准备并返回 JSON 格式的响应。
当加载 WordPress 仪表板时,客户端代码会设置一个间隔,也称为滴答,每 15 到 120 秒运行一次,具体取决于任务。Heartbeat API 代码的任务是在客户端收集数据并将其传送到服务器以接收更新。
Heartbeat API 调用的总数取决于同时在网站上工作的活跃用户数。这与加载的 WordPress 仪表板实例数相同。在多个浏览器窗口中打开 WordPress 管理区域会创建相同数量的 Heartbeat API 调用,就好像多个用户同时登录到网站后端并执行任务一样。
为什么要限制 WordPress Heartbeat API 调用?
限制 WordPress Heartbeat API 调用可以帮助加速分配了非常有限的服务器资源池的 WordPress 站点,尤其是在 CPU 时间方面。虽然 Heartbeat API 不太可能是网站性能不佳背后的关键问题,但绝对值得考虑。
每次 Heartbeat API 与服务器通信时,都会向 wp-admin 中的 admin-ajax.php 文件发出 POST HTTP 请求。由于 Heartbeat API 调用每 15-120 秒发送到服务器一次,如果有多个活动管理员用户,调用次数会增加,API 会使服务器过载,导致 CPU 和系统内存使用率过高。
一些 WordPress 网站所有者甚至会将 Heartbeat API 活动误认为是正在进行的 DDOS 攻击。WordPress Heartbeat API 请求无法缓存,这样每次调用都会占用一定的服务器资源。如果服务器主动使用其资源来处理 API 调用,您的客户在浏览您的网站时可能会遇到内容呈现延迟。
禁用 Heartbeat API 前需要考虑的三件事
完全禁用 Heartbeat API 很少是一个好主意。在大多数情况下,WordPress 仪表板将失去与服务器实时通信的能力。禁用 Heartbeat API 后,您将无法再接收通知。此外,您将无法利用内容锁定、自动保存和修订。
在禁用 Heartbeat API 或限制其活动之前要考虑的三个关键事项是:
- 托管。查看为您的网站分配了多少 CPU 时间和系统内存。您的网站可以创建的进程数量是否有限制?
- 花费在网站管理上的时间。您在管理和内容发布上花费了多少时间?有多少活跃用户经常同时在 WordPress 仪表板和后端界面工作?
- 每天收到的流量。您的 WordPress 网站每天接待多少访问者?您是否有适当的缓存解决方案来减轻服务器上的负载?
根据网站类型和您当前的托管设置,限制 WordPress Heartbeat API 调用的数量将对整体性能产生不同的影响。如果您正在运行一个资源密集型 WordPress 站点,多个用户执行定期维护和发布内容,减少 Heartbeat API 调用的数量可能非常有益。它还可以帮助您避免为了适应不断增加的流量而增加托管成本。
如何使用插件管理 WordPress Heartbeat API
管理 WordPress Heartbeat API 请求的最简单方法是使用为此设计的 WordPress 插件。您可以利用多种不同的解决方案。由WP Rocket开发的 Heartbeat Control是最好和最受欢迎的之一。
注:如果你已经使用了 WP Rocket 缓存插件,已经内置了 Heartbeat API 功能,无需再使用独立的插件。
从 WordPress 仪表板安装并激活 Heartbeat Control 插件。导航到设置 > 心跳控制以打开插件的配置。Heartbeat Control 允许您使用以下选项在网站前端、WordPress 仪表板和块编辑器中管理 Heartbeat API 的活动:
- 允许心跳。如果启用此选项,插件将不会以任何方式限制 Heartbeat API 调用。
- 禁用心跳。禁用 Heartbeat 将阻止 WordPress 网站所选区域中的所有 API 调用。
- 修改心跳。您可以为 WordPress Heartbeat API 调用设置自定义间隔,范围从 15 到 300 秒。
大多数时候,为 WordPress Heartbeat API 调用配置更大的间隔是最好的做法。例如,将网站所有三个区域的 API 调用次数限制为每五分钟一次,对整体性能的影响与完全禁用 Heartbeat API 相同。
请注意,限制块编辑器中的 Heartbeat API 活动可能需要您更频繁地保存修订以避免丢失对您正在编辑的内容的任何更改。如果您不依赖自动保存并且不需要内容锁定,您可以在古腾堡中完全禁用 WordPress Heartbeat API。
如何在没有插件的情况下限制 WordPress Heartbeat API 调用
您可以使用WordPress 挂钩在没有插件的情况下限制 WordPress Heartbeat API 调用。在您网站的活动主题 functions.php 文件中添加几行代码可以帮助您禁用 Heartbeat API 或指定 API 调用的自定义间隔。
WordPress 带有内置的主题编辑器,允许您从管理仪表板修改 functions.php。但是,大多数 WordPress 安全插件会禁用此功能以保护您的网站,以防它受到威胁。
您可以使用主机控制面板提供的文件管理器界面或通过 FTP 或 SSH 连接到您的网站文件来编辑文件。
请注意,添加到 functions.php 文件的任何代码很可能会被主题的下一次更新覆盖。因此,使用插件管理 WordPress Heartbeat API 可能会更好。如果您使用子主题,您可以更改其 functions.php 文件,而不会在父主题更新时有被覆盖的风险。
禁用Heartbeat API
添加下面的操作允许您停止 Heartbeat API,有效地禁用所有 API 调用。为此,将下面的代码片段添加到 functions.php 的底部。
function wpdx_stop_heartbeat() {
wp_deregister_script('heartbeat');
}
add_action('init', 'wpdx_stop_heartbeat', 1);
您可以用相同的方式禁用 WordPress Heartbeat API 中的特定功能。
function wpdx_disable_autosave() {
wp_deregister_script('autosave');
}
add_action('admin_init', 'wpdx_disable_autosave');
为 Heartbeat API 调用配置自定义间隔
要限制 WordPress Heartbeat API 调用,您可以指定一个过滤器,该过滤器将为 API 请求配置自定义间隔。以下代码片段将 Heartbeat API 调用限制为每分钟一个请求。
function wpdx_set_heartbeat_time_interval($settings) {
$settings['interval']=60;
return $settings;
}
add_filter('heartbeat_settings', 'wpdx_set_heartbeat_time_interval');
为 WordPress 自动保存配置自定义间隔
WordPress 允许您通过重新定义 AUTOSAVE_INTERVAL 常量来配置自动保存的自定义间隔。与其他常量类似,您可以通过将以下行添加到主WordPress 配置文件来为其分配新值:
define('AUTOSAVE_INTERVAL', 300);
您可以为间隔分配一个更大的值,例如 3600,即一个小时,以完全禁用 WordPress 自动保存。在 wp-config.php 中配置的 WordPress 常量在任何 WordPress 更新期间都不会被修改。您以后不必重新定义它们。
总结
WordPress 的 Heartbeat API 是 WordPress 核心内置的关键功能之一,可使用 AJAX 调用实现实时客户端-服务器通信。应用程序编程接口允许 WordPress 在服务器和 WordPress 仪表板之间交换数据,以提供更好的管理体验。
Heartbeat API 每分钟多次向服务器发送请求。这会导致服务器负载增加和性能下降。您可以通过使用插件、添加 WordPress 挂钩或定义 WordPress 常量来限制 Heartbeat API 调用。