投稿一覧の画面を開いているだけで、WordPressはサーバーに10秒おきに通信しています。操作を続けていれば、1時間で360回です。

この通信をしているのが「Heartbeat API(ハートビート)」です。記事の自動保存や、ほかの人が編集中の記事に「編集中」と表示する機能を支えている、WordPressの本体の仕組みです。

1人で1画面を開いているだけなら、この回数で困ることはまずありません。管理画面を開くとサーバーが重くなる、レンタルサーバーから「CPUの使用率が高い」と連絡が来た、というときは、どの画面を開いたままにしているかを見直すと原因が分かることがあります。


WordPressで記事販売ができる「YOMERU」
記事を、そのまま収益に。
WordPressサイトで記事の有料販売ができる
無料のプラグイン「YOMERU」。

Heartbeat APIとは

Heartbeat APIは、管理画面を開いている間、ブラウザから一定の間隔でサーバーに通信する仕組みです。通信先は wp-admin/admin-ajax.php です。

Localで作ったテストサイト(WordPress 7.1.3)では、通信のたびに次のような情報がやり取りされていました。

やり取りされる情報 役割
wp-refresh-post-lock 編集中の記事のロックを延長する。ほかの人が同じ記事を開くと「編集中」と表示される
wp-auth-check ログインの有効期限が切れていないか確かめる。切れていればログイン画面を出す
server_time サーバーの時刻

クラシックエディターでは、サーバーへの記事の自動保存もこの通信に乗って送られます。

通信先の admin-ajax.php は、1回ごとにWordPressの本体と、有効にしているプラグインをすべて読み込みます。回数がそのままサーバーの負担になるのはこのためです。

画面ごとの通信の間隔

テストサイトで、画面ごとの間隔を確かめました。

Heartbeatが1時間に送る通信の回数

  • ダッシュボードなどは、60秒ごと
  • 投稿の編集画面と投稿一覧は、10秒ごと(ブロックエディターでも、クラシックエディターでも同じ)
  • ブラウザで別のタブに切り替えると、間隔が120秒に延びる
  • サイトの表側(ログインしていない訪問者が見る画面)では動かない

裏に回したタブで記録すると、通信は121秒の間隔でした。WordPressの本体のコードにも「フォーカスがないときは120秒」と書かれています。

ダッシュボードなどでは、マウスやキーボードの操作が10分なければ通信が止まります。投稿の編集画面では止まりません。ただし、どの画面でも操作が5分なければ間隔は120秒に延び、60分たつと止まります。

投稿の編集画面だけでなく、投稿一覧も10秒ごとに通信していました。一覧で「〇〇さんが編集中」と表示するために、ほかの人の編集状況を確かめているためです。3人が記事を書き続けていれば、1時間で1,000回を超えます。手を止めて5分たつと、120秒ごとに減ります。

Heartbeatの間隔を変える

コードで最短の間隔を決める

子テーマの functions.php か、コードスニペット用のプラグインに次のコードを追加すると、Heartbeatの間隔を「最短でも60秒」にできます。

add_filter( 'heartbeat_settings', function ( $settings ) {
	$settings['minimalInterval'] = 60;
	return $settings;
} );

テストサイトで試すと、10秒だった投稿一覧と編集画面が、どちらも60秒になりました。

interval ではなく minimalInterval を使います。投稿の編集画面では、WordPressのJavaScriptが読み込みのあとに間隔を10秒に設定し直すためです。minimalInterval は、そうした変更があっても下回らない最短の間隔なので、編集画面にも効きます。

指定できるのは600秒までですが、WordPressのコードのコメントには、120秒より長くすると記事のロックなどの機能が制限されると書かれています。

プラグインで変える

コードを書かずに変えたいときは、プラグイン「Heartbeat Control」を使う方法もあります。管理画面、投稿の編集画面、サイトの表側(テーマやプラグインが表側でHeartbeatを使う場合)ごとに、間隔の変更や停止を選べます。

ただし、最後の更新は2023年8月で、WordPress.orgでの動作確認はWordPress 6.3までです。

管理画面から「Heartbeat Control」を検索してインストールするか、下のボタンからもダウンロード可能です。プラグインファイルを wp-content/pluginsディレクトリにアップした後、管理画面から有効化してください。

Heartbeat Control

止めるのはおすすめしない

Heartbeatを完全に止める方法もありますが、次の機能が動かなくなります。

  • クラシックエディターでの記事の自動保存
  • 複数の人が同じ記事を開いたときの「編集中」の表示と、編集の取り合いの防止
  • ログインの有効期限が切れたときの、ログイン画面の表示

クラシックエディターでは、サーバーへの自動保存が止まります。別のパソコンで続きを書く、ブラウザごと閉じてしまった、というときに、書きかけの内容を戻せなくなります。ブロックエディターの自動保存はHeartbeatを使わないので、止めても影響しません。

まずは管理画面の使い方を見直す

コードを入れる前に、使い方で減らせることもあります。

  • 書き終えた記事の編集画面は、開いたままにせず閉じる
  • 管理画面のタブを、いくつも開いたままにしない
  • 使っていないときは、別のタブに切り替えておく(間隔が120秒に延びる)

管理画面が重い原因が、Heartbeatではないこともあります。データベースの「autoload」が多すぎる場合と、PHPのメモリが足りない場合です。

まとめ

管理画面が重いと感じたら、Chromeのデベロッパーツールの「ネットワーク」で admin-ajax.php に絞り込み、1分間に何回出ているかを数えます。6回並ぶ画面が、10秒ごとに通信している画面です。

複数人で記事を書いているサイトなら、そこで minimalInterval を60にするコードを入れます。編集画面と投稿一覧の通信が、10秒ごとから60秒ごとになります。

世界最高品質のデザインの
WordPressテーマ集
WordPressテーマ「ISSUE」
WordPressテーマ「ISSUE」
人材不足を解決する求人採用サイトを。
WordPressテーマ「SEEED」
WordPressテーマ「SEEED」
Webサービスを販売するLP型テーマ。
WordPressテーマ「GENESIS」
WordPressテーマ「GENESIS」
スタイリッシュな企業サイトの決定版。
WordPressテーマ「SOLARIS」
WordPressテーマ「SOLARIS」
一流の企業のための一流の企業サイトを。