什么是 WordPress Heartbeat API ?
2013 年,WordPress 推出的3.6 版中增加了 Heartbeat API 。
WordPress Heartbeat API 在浏览器和服务器之间使用AJAX调用提供了一种通信协议。
顾名思义,API 将在接收到数据时发送连续脉冲并触发事件(或回调)。此功能可帮助同步服务器和 Wordpress 仪表板之间的所有数据。
heartbeat API 能实现的功能非常多也很实用。例如,当从编辑器创建/编辑帖子时,它提供了定期自动保存帖子的功能。
在多用户 WordPress 站点中,它具有锁定功能,可防止编辑其他用户正在处理的帖子。如果使用 WooCommerce 插件,此 API 还可以实时显示网站上发生的销售情况。
为什么要限制 WordPress Heartbeat API ?
虽然自动保存或实时数据通知等功能都是有用的,但在特定情况下却对服务器是一种负担。
Heartbeat API 使用/wp-admin/admin-ajax.php文件发送 AJAX 请求(POST 请求) 。默认情况下,不论是前端还是后台页面都会调用API,而每一次对该PHP文件的执行,都会占用服务器一定的 CPU 与内存资源。
如果服务器配置较低或使用的是资源限制很严格的共享主机的话,过多的 admin-ajax.php 请求会造成服务器相应性能大幅下降,甚至出现“502 bad gateway”等错误。
限制或关闭 Heartbeat API 之前,请先仔细思考一下。
假设完全关闭 Heartbeat API ,当然可以节约服务器资源并且提升服务器相应速度,但如果安装了调用 Heartbeat API 的WordPress 插件,则无法在网站上显示实时信息了。
另外在没有 WordPress Heartbeat API 的情况下,如果忘记单击“保存草稿”按钮,那么在帖子中所做的所有更改有可能丢失。而且无法再访问WordPress 中的修订功能。
如果上述情况都无法接受,那就不要完全关闭它,而是限制它的执行频率,例如将它设置成每60秒执行一次。
限制 WordPress Heartbeat API 执行频率的方法
WordPress Heartbeat API 默认执行频率是 15 秒 ,通过 Perfmatters 或 WP Rocket 等插件均可更改默认执行频率。
以下以 Perfmatters 插件(功能强大的 WordPress 性能优化插件)为例:
Perfmatters 对 Heartbeat 的控制有三个选项:保持默认、完全禁用、仅在编辑帖子/页面的时候启用。如果未使用 WooCommerce 等插件的话,推荐选择第三种选项,这样可以保留WordPress 自动保存和修订功能。
Perfmatters 还可以修改 Heartbeat 频率,建议改至 60 秒。具体设置如下图:

如果使用 WP Rocket 插件的网站,则可以分别对后端、文章编辑器、前端进行控制,可参考以下示例:

提示
如果同时使用 Perfmatters 与 WP Rocket 插件,仅在一个插件中对其进行设置。否则有可能造成冲突。
免插件关闭 Heartbeat API 的方法
add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
wp_deregister_script('heartbeat');
}
以上代码需添加到代码片段插件或当前主题 functions.php 文件中才可生效。