-2

サーバー上で node.js コードを実行していますが、それがブロックされているかどうかを知りたいです。これは次のようなものです。

function addUserIfNoneExists(name, callback) {
    userAccounts.findOne({name:name}, function(err, obj) {
        if (obj) {
            callback('user exists');
        } else {

            // Add the user 'name' to DB and run the callback when done.
            // This is non-blocking to here.
            user = addUser(name, callback)

            // Do something heavy, doesn't matter when this completes.
            // Is this part blocking?
            doSomeHeavyWork(user);
        }
    });
};

完了するとaddUserdoSomeHeavyWork関数が実行され、最終的に何かがデータベースに戻されます。この関数にかかる時間は問題ではありませんが、サーバー上の他のイベントをブロックするべきではありません。

それで、node.jsコードがブロックされるかどうかをテストすることは可能ですか?

4

2 に答える 2

1

Node.js コードのどの部分でも、システムまたは I/O 操作を呼び出さず、(コンピューターの意味で) 計算に時間がかかる同期ブロック (大きな配列の反復処理など) を避ける必要があります。代わりに、このタイプのコードを別のワーカーに移動するか、process.nextTick() を使用して小さな同期ピースに分割します。ここで process.nextTick() の説明を見つけることができますが、すべてのコメントも読んでください。

于 2013-07-10T10:37:15.457 に答える