リアルタイムのダッシュボードと指標
自動で更新されるグラフとカウンター。ページを開いた瞬間に最新の値を表示し、開いているダッシュボードごとのポーリングは不要です。
管理画面、売上ダッシュボード、監視画面、株価や暗号資産のティッカーは、数字が最新でなければ意味がありません。1 分ごとの再読み込みでは古いデータで判断することになり、開いているダッシュボードごとに API をポーリングすれば、1 回の更新を全員にプッシュするよりはるかに高くつきます。
ユーザーにとっての価値
- 注文、登録、計測値が入るたびに、グラフとカウンターが自動で動きます。
- ページを開いた瞬間に最新の値。次の更新まで空のタイルを見せません。
- 壁に掛けたモニターも、再読み込みなしで一日中リアルタイムのまま。
使う機能
- キャッシュチャンネル(
cache-、private-cache-)。最後のイベントを 30 分保持し、新しい購読者にすぐ渡します。 - バッチ API(
triggerBatch)。複数の指標を 1 回のリクエストで送ります。 - 無料のファンアウト:見ている人が 10 人でも 1 万人でも、1 回の配信は 1 メッセージです。
cache_missWebhook。新しい閲覧者がキャッシュを見つけられなかったことをサーバーに知らせます。
ステップ 1:バックエンドから指標を配信する
値が変わったときに更新を送り、変化の速い数字は短い間隔で定期的に送ります。複数のチャンネルを 1 つのバッチにまとめれば、HTTP 呼び出しは 1 回です:
setInterval(async () => {
const stats = await metrics.snapshot();
await pusher.triggerBatch([
{ channel: 'private-cache-dash-sales', name: 'update', data: { revenue: stats.revenue, orders: stats.orders } },
{ channel: 'private-cache-dash-signups', name: 'update', data: { today: stats.signups } },
]);
}, 5000);バッチ内のチャンネルはそれぞれ 1 メッセージなので、2 つのタイルを 5 秒ごとに更新すると 1 日約 35,000 メッセージです。値が変わったときだけ送れば、もっと少なくなります。
ステップ 2:ダッシュボードで購読する
const sales = pusher.subscribe('private-cache-dash-sales');
sales.bind('update', ({ revenue, orders }) => {
revenueTile.set(revenue);
ordersChart.push(orders);
});
// Nothing published in the last 30 minutes: load the value from your API once
sales.bind('pusher:cache_miss', async () => {
revenueTile.set(await fetch('/api/stats/revenue').then((r) => r.json()));
});private- プレフィックスにより、各ダッシュボードを誰が見られるかは認可ルートが決めます。たとえばスタッフだけ、あるいはそのアカウントの顧客だけ、というように。
ステップ 3:誰かが来たらキャッシュを埋める
Webhook のエンドポイントで cache_miss を受け取り、キャッシュが空のダッシュボードを誰かが開いたら現在の値を配信します。その後の閲覧者はキャッシュから受け取ります:
for (const e of webhook.getEvents()) {
if (e.name === 'cache_miss' && e.channel === 'private-cache-dash-sales') {
const s = await metrics.snapshot();
await pusher.trigger(e.channel, 'update', { revenue: s.revenue, orders: s.orders });
}
}ヒント
- すべてを 1 つのチャンネルに入れず、タイルごと、顧客ごとにチャンネルを分けましょう。閲覧者は見ているものだけを受け取ります。
- レンダリング済みの HTML ではなく数値を送り、1 回の更新は 10 KB(Free プランは 4 KB)以内に。
- 顧客向けのダッシュボード(自社 SaaS の分析ページなど)も、アカウントごとのチャンネルで同じように作れます:
private-cache-account-123-usage。 - 間隔を調整するときは、ポータルのアプリページで自分のメッセージ数と接続数をリアルタイムで確認できます。