18

同期することでコードの効率が低下することはありませんか? 同期コーディングが有利な理由 調査中に次の 2 つのリンクを見つけました: http://bjouhier.wordpress.com/2012/03/11/fibers-and-threads-in-node-js-what-for/https://github.com /Sage/streamlinejs/

目的がスパゲッティ コードを防ぐことである場合、たとえば streamline.js を使用して、コールバック ピラミッドではない非同期コードを使用できることは明らかですよね?

4

2 に答える 2

33

ここで 2 つのことを区別する必要があります。

  • ノードのfs.readFileSyncfs.statSyncなどの同期関数。これらすべての関数Syncの名前には (*) が含まれています。これらの関数は、真に同期的ブロック的です。それらを呼び出すと、イベント ループがブロックされ、ノードのパフォーマンスが低下します。これらの関数は、サーバーの初期化スクリプト (またはコマンド ライン スクリプト) でのみ使用してください。
  • ファイバーstreamline.jsなどのライブラリとツール。これらのソリューションでは、同期スタイルでコードを記述できますが、それらを使用して記述したコードは依然として非同期で実行されます。イベント ループをブロックしません。

(*)requireもブロックしています。

Meteor は繊維を使用しています。そのコードは同期スタイルで書かれていますが、ノンブロッキングです。

勝者はパフォーマンス側ではありません (これらのソリューションには独自のオーバーヘッドがあるため、わずかに遅くなる可能性がありますが、キャッシュなどの特定のコード パターンでは生のコールバックよりも優れたパフォーマンスを発揮します)。勝利と、これらのソリューションが開発された理由は、使いやすさの面にあります。非同期関数を呼び出す場合でも、同期スタイルでコードを記述できます。

2017 年 1 月 25 日編集:ノンブロッキングファイバーを説明するために 3 つの要点を作成 ました。

于 2012-08-28T20:18:58.950 に答える
3

のようなものを使用する場合、コードは「同期」ではありませんstreamlinejs。実際のコードは引き続き非同期で実行されます。匿名のコールバック関数をたくさん書くのはあまりきれいではありません。

于 2012-08-27T22:11:10.623 に答える