ここで 2 つのことを区別する必要があります。
- ノードの
fs.readFileSync
、fs.statSync
などの同期関数。これらすべての関数Sync
の名前には (*) が含まれています。これらの関数は、真に同期的でブロック的です。それらを呼び出すと、イベント ループがブロックされ、ノードのパフォーマンスが低下します。これらの関数は、サーバーの初期化スクリプト (またはコマンド ライン スクリプト) でのみ使用してください。
- ファイバーやstreamline.jsなどのライブラリとツール。これらのソリューションでは、同期スタイルでコードを記述できますが、それらを使用して記述したコードは依然として非同期で実行されます。イベント ループをブロックしません。
(*)require
もブロックしています。
Meteor は繊維を使用しています。そのコードは同期スタイルで書かれていますが、ノンブロッキングです。
勝者はパフォーマンス側ではありません (これらのソリューションには独自のオーバーヘッドがあるため、わずかに遅くなる可能性がありますが、キャッシュなどの特定のコード パターンでは生のコールバックよりも優れたパフォーマンスを発揮します)。勝利と、これらのソリューションが開発された理由は、使いやすさの面にあります。非同期関数を呼び出す場合でも、同期スタイルでコードを記述できます。
2017 年 1 月 25 日編集:ノンブロッキングファイバーを説明するために 3 つの要点を作成
しました。