進行中ジョブの完了検知ポーリングは「ジョブがある時だけ」有効化してAPIの無駄打ちを避ける
フロントエンド
ポーリング
API効率
判断
運用
current-job のような「進行中ジョブの有無」を返すエンドポイントを固定間隔で常時ポーリングすると、ジョブが無い平常時も無駄にAPIを叩く。ポーリング間隔を固定値でなく関数化し、「レスポンスにジョブがあるときだけ間隔ポーリング、無ければ停止」にする(例: refetchInterval を data != null ? interval : false)。
トレードオフと補完:
- ジョブなし(null)で止めると、別ユーザー・別画面で後発的に開始されたジョブを常時検知はできなくなる。
- ただし自分が開始した操作は mutation 成功時に current-job query を invalidate すれば拾える(そこでジョブありになりポーリングが始まる)。
- 判断基準: 「自分が開始したジョブの完了検知で十分」なら条件付ポーリングが最適、「他者が開始したジョブもこの画面で常時検知したい」なら常時ポーリングの方が確実。後発検知もある程度欲しければ、復帰時や操作直前の one-shot 確認を足す。
注意: refetchOnMount / refetchOnWindowFocus が false の環境では、null でポーリングを止めた後に同じ画面にいる限り後発ジョブを拾う自然な再取得契機が無いので、one-shot の補完が特に必要になる。