SCALE — Build Lab
開発パターン · JAVASCRIPT PATTERN

Debounce サーバ同期

CATEGORY開発パターン TYPEJavaScript Pattern EFFORT30〜60分 DIFFICULTY
PRIMARY CODE
js
let _saveTimer = null;
const _pending = new Map();
function scheduleServerSync(key, value) {
  _pending.set(key, value);
  if (_saveTimer) clearTimeout(_saveTimer);
  _saveTimer = setTimeout(async () => {
    const batch = Object.fromEntries(_pending);
    _pending.clear();
    try { await fetch('/api/data', { method: 'POST', body: JSON.stringify(batch) }); }
    catch { /* リトライキューに戻す */ }
  }, 1000);
}
前提条件
Tailwind CSS v4TypeScript 5
USE CASES
  • 任意のダッシュボードに組み込み

Debounce サーバ同期

:LiTarget: 用途

ローカル更新を debounce してサーバ送信。連続編集を1リクエストに集約。

:LiSparkle: 特徴

  • debounce 1秒
  • バッチ送信
  • リトライ
  • 保存中インジケータ

:LiCode: コード(コピペ用)

let _saveTimer = null;
const _pending = new Map();
function scheduleServerSync(key, value) {
  _pending.set(key, value);
  if (_saveTimer) clearTimeout(_saveTimer);
  _saveTimer = setTimeout(async () => {
    const batch = Object.fromEntries(_pending);
    _pending.clear();
    try { await fetch('/api/data', { method: 'POST', body: JSON.stringify(batch) }); }
    catch { /* リトライキューに戻す */ }
  }, 1000);
}

:LiHandPointer: 使い方

対象プロジェクトに該当ファイルをコピーして、props を流し込むだけ。

:LiAlertCircle: 注意事項

  • 依存パッケージを忘れず追加