Skip to content

ファイルウォッチャーイベントのバッチ処理改善 #420

@j4rviscmd

Description

@j4rviscmd

背景

Issue #46(大規模ペイロード向けWebSocketベースのIPCストリーミング)の分割Issue。

AS IS(現状)

  • notify-debouncer-fullで500msデバウンス付きのファイル監視
  • vscode:fs_changeグローバルイベントとしてemit(fire-and-forget)
  • バックプレッシャーなし
  • 自動再起動機能なし
  • ThrottledDelayerによるウォッチ要求のバルク送信なし

関連コード

  • src-tauri/src/commands/file_watcher.rs — ファイルウォッチャーコマンド
  • src/vs/platform/files/common/watcher.ts — 本家のウォチャーアーキテクチャ(参考)

TO BE(目標状態)

  • ウォッチ要求のバッチ送信(ThrottledDelayerパターン)
  • イベントのcoalesce(重複排除)強化
  • 自動再起動(最大5回)
  • オプション: correlated watcher(correlationIdによるイベントフィルタリング)

想定アプローチ

  • Rust側のウォッチャーイベント処理の改善
  • バックプレッシャーは本家も実装していないため、まずはバッチ最適化を優先

本家(Electron版)の実装

アーキテクチャ(3層構造)

  1. OSレベルウォッチャー — フォークした子プロセスで動作
  2. ウォッチャークライアント — Shared Process内でIPC接続管理
  3. FileService — レンダラーでイベント受信

バッチ処理

  • ThrottledDelayerでウォッチ要求を蓄積して一括送信
  • 新規ウォッチ要求は既存のものと重複排除

イベント処理

  • coalesceEvents()で同一パスの重複イベントを統合
  • correlated watcher(correlationId付き)で特定のウォッチャーにのみイベント配信

再起動

  • AbstractWatcherClientで予期しない終了時に自動再起動(最大5回)

関連コード(本家)

  • src/vs/platform/files/common/watcher.tsAbstractWatcherClient、イベントcoalesce
  • src/vs/platform/files/common/diskFileSystemProvider.ts — ウォッチルーティング
  • src/vs/platform/files/node/watcher/watcherClient.ts — 子プロセスIPC実装

バックプレッシャー

  • 本家も明示的なバックプレッシャーなし(fire-and-forget)
  • ただし専用プロセスで分離されているため、レンダラーへの影響が少ない

参考

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestlow低い問題: 軽微な問題、UXへの影響小tauri-migrationElectron to Tauri 2.0 migration

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions