複数の接続からの着信データを処理する Node.js で TCP サーバーを作成しています。サーバーは受信データ ストリームを解析し、データベースに格納されているオブジェクトを返します。私はパフォーマンスの最適化を試みており、次の 2 つのコーディング プラクティスをテストしています。
- スニペット 1 は、ネストされた匿名コールバックを使用します。
- スニペット 2 では、宣言された関数を使用して、匿名のコールバックを置き換えました。
スニペット 2 は、新しい着信データ パケットごとに新しい関数オブジェクトが作成されるのを回避するため、より高速であると想定しました。ただし、実際には、スニペット 1 の方が 20% 速いようです。
誰かが理由を知っていますか?
スニペット 1:
function TcpOnConnection (stream) {
stream.on("data", function(data) {
parseTcp(data,function(err,obj) {
if (err) console.log(err.message);
if (obj) {
stream.write(obj.returnMsg);
storeData(obj);
}
});
});
}
TCPserver.on("connection",TcpOnConnection);
スニペット 2:
function TcpOnConnection (stream) {
function handleParsed(err,obj) {
if (err) console.log(err.message);
if (obj) {
stream.write(obj.returnMsg);
storeData(obj);
}
}
function StreamOnData(data) {
parseTcp(data,handleParsed);
}
stream.on("data", StreamOnData);
}
TCPserver.on("connection",TcpOnConnection);