WordPress Heartbeat APIはadmin-ajax.phpを使用してAJAX呼び出しを実行します。ユーザーXがブラウザーを開いたままにしておくと、サーバーに多数の呼び出しが行われ、各呼び出しは「ビート」があるときに発生します。ユーザーYが自分のブラウザを開いたままにしておくと、サーバーに対してさらに多くの呼び出しが行われ、これらの呼び出しはそれぞれ 'ビート'が発生したときに発生します。大規模なWebサイトでも、ユーザーA、ユーザーB、およびユーザーCがすべて同じことを行う可能性があります。
私の質問:
多数のユーザーが同時にWebサイトにアクセスする可能性があることを考慮すると、WordPress Heartbeat APIの「ビート」がずれる(ユーザーXの「ビート」がユーザーYの「ビート」の数秒前に発生)すべてのユーザーのための時間?
「ビート」がずれていない場合、私の懸念は「ビート」が発生した時点でサーバーに非常に大きな負荷がかかることです。
次の tick は/wp-includes/js/heartbeat.js
ファイル内のtime()
メソッド内のブラウザ時間scheduleNextTick()
によって決定されるので、ビートは本質的に スタガード であると思います。
var delta = time() - settings.lastTick,
interval = settings.mainInterval;
次のティックをsetTimeout
関数でスケジュールするのに使われています。
if ( delta < interval ) {
settings.beatTimer = window.setTimeout(
function() {
connect();
},
interval - delta
);
} else {
connect();
}
ブラウザ時間は次のように定義されています。
function time() {
return (new Date()).getTime();
}
connect()
メソッドはajax呼び出しを含み、always()
を使用します。
.always( function() {
settings.connecting = false;
scheduleNextTick();
})
次の目盛りをスケジュールします。
利用可能な目盛りの間隔は5秒、15秒、30秒、60秒です。
ティック間隔が短い、非常にアクティブなユーザーの数が多い場合は、ビートが同時に発生しているように見える場合があります。
いくつかのデータを持つのは常に良いことです。そのため、heartbeat_tick
フックを使って、ログインしているユーザーのティックを記録できます。
add_action( 'heartbeat_tick',
function( $response, $screen_id )
{
$file = WP_CONTENT_DIR . '/ticks.log'; // Edit this filepath to your needs.
if( file_exists( $file ) && is_writeable( $file ) )
{
file_put_contents(
$file,
sprintf( "%s - Tick from user_id : %d - from screen_id : %s" . PHP_EOL,
date( 'c' ),
get_current_user_id(),
$screen_id
),
FILE_APPEND | LOCK_EX
);
}
}
, 11, 2 );
これはticks.log
ファイルからの例です。
2014-09-01T12:41:04+00:00 - Tick from user_id : 1 - from screen_id : edit-post
2014-09-01T12:41:19+00:00 - Tick from user_id : 1 - from screen_id : edit-post
2014-09-01T12:41:34+00:00 - Tick from user_id : 1 - from screen_id : edit-post
2014-09-01T12:41:56+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:42:11+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:42:20+00:00 - Tick from user_id : 3 - from screen_id : upload
2014-09-01T12:42:38+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:43:05+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:43:08+00:00 - Tick from user_id : 3 - from screen_id : attachment
2014-09-01T12:43:20+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:43:36+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:44:17+00:00 - Tick from user_id : 3 - from screen_id : profile