ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js の非同期パターン - Node.js チュートリアル - パート 6

Node.js の非同期パターン - Node.js チュートリアル - パート 6

DDD
DDDオリジナル
2024-09-20 18:46:02743ブラウズ

Async Patterns in Node.js - Node.js Tutorial - Part 6

Node.js の非同期パターン

Node.js はシングルスレッドのイベント駆動型アーキテクチャで動作します。つまり、メインスレッドをブロックすることなく、多くの操作を同時に処理できます。これは、他のコードの実行をブロックしないように、I/O 操作 (ファイルの読み取り、データベースのクエリなど) などのタスクを非同期で実行する必要があるスケーラブルなアプリケーションを作成する場合に非常に重要です。

非同期コードと同期コードの作成

同期コード

同期コードは一度に 1 ステップずつ実行されます。つまり、次のステップに進む前に各ステップが完了する必要があります。これにより、操作が遅い場合 (大きなファイルの読み取りやデータベースのクエリなど) にメインスレッドがブロックされる可能性があります。

例 (同期コード):

const fs = require('fs');

const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
  • 問題: readFileSync に時間がかかる場合 (ファイルが大きいなど)、この期間中アプリケーション全体がブロックされます。

非同期コード

一方、非同期コードはメインスレッドをブロックしません。操作が完了するのを待つ代わりに、プログラムは実行を継続し、準備ができたときに非同期操作の結果を処理します。

例 (非同期コード):

const fs = require('fs');
// Call Back
fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

console.log('This will log before the file content!');
  • この例では、ファイルは非同期で読み取られ、プログラムはブロックしません。 console.log('This will log before the file content!') という行は、ファイルの読み取り中に実行されます。

同期と非同期を使用する場合

  • 同期コードは、パフォーマンスが問題にならない小規模なタスクやスクリプトに適しています。
  • 非同期コードは、データベース クエリや HTTP リクエストなどの操作を待機している間にメイン スレッドをブロックしたくない、Web サーバーなどの I/O 負荷の高いアプリケーションに最適です。

非同期/待機

ES2017 (Node.js 7.6+) で導入された async/await は、Promise の上に構築された糖衣構文です。これにより、非同期コードを同期のような方法で記述できるようになり、コードがより読みやすくなり、保守が容易になります。

例 (非同期/待機):

   const fs = require('fs').promises;

   async function readFile() {
     try {
       const data = await fs.readFile('file.txt', 'utf8');
       console.log(data);
     } catch (err) {
       console.error(err);
     }
   }

   readFile();

まとめ

  • コールバックはシンプルですが、コールバック地獄につながる可能性があります。
  • 約束 コールバック地獄を一掃し、より良いエラー処理を提供します。
  • Async/Await により、非同期コードが同期しているように見え、可読性が向上します。

非同期コードと同期コードの選択は、ユースケースによって異なります。 I/O の多い操作の場合は、メインスレッドをブロックせず、アプリケーションの応答性を維持するために、常に非同期パターンを優先してください。

読んでいただきありがとうございます。コーディングを楽しんでください! ?

以上がNode.js の非同期パターン - Node.js チュートリアル - パート 6の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。