Open1

【Node/TypeScript】Node.jsでのバックグラウンド処理について📝

まさぴょん🐱まさぴょん🐱

process.nextTick(async () => {}) について📝

process.nextTick(async () => {}) は非同期処理を実現していますが、厳密な意味での「バックグラウンド処理」とは違います。

process.nextTick() はNode.jsの現在のイベントループサイクルが完了した直後(次のティック)にコールバックを実行するようスケジュールします。
これにより、 process.nextTick()を呼び出している関数は処理の完了を待たずにスレッド情報を即座に返すことができます。

この方法では、検索処理が完了する前にAPIレスポンスを返せるため、ユーザー体験が向上しますが、真のマルチスレッド処理ではなく、Node.jsのシングルスレッド上での非同期実行です。

  1. executeSearch 関数がAPIとして呼ばれる
  2. まず createSearchThread でスレッドを作成(ステータスは PENDING)
  3. process.nextTick で検索処理を非同期でスケジュール
  4. 作成したスレッド情報(thread)をAPIのレスポンスとしてすぐに返す
  5. APIレスポンスが返された後に、実際の検索処理が実行される

上記処理フローにより、時間のかかる検索処理をバックグラウンドで実行しながら、クライアントには即座にレスポンスを返すことができ、UXが古城します。
クライアントは後で getSearchStatus などを使って処理状況を確認できます。