2012-04-06 5 views
4

nodejs.orgホームページにある同じコードを使用してください。 1.8Mbの静的ファイルを提供します。そしてNginxと同じことをして、違いを見てください。 http://pastie.org/3730760なぜNodejsはNginxより80倍以上のCPU使用率を持つファイルを扱うのですか?

Code :

Screencast :http://screencast.com/t/Or44Xie11Fnp

あなたはこのようなことが起こらないだろう何かを知っているので、私たちはnginxのサーバーを展開し、私たちの生活を複雑にする必要がない場合は、共有してください。

ps1。このテストはノード0.6.12で行われます。好奇心の中で、私は0.4.12に格下げされました。それが逆戻りかどうかを確認するために、逆に、悪化しました。同じファイルは25%を2回使用しました。

ps2。このポストはnodejsの嫌悪感ではありません。私たちはnodejsを使用しています。実際に私たちの打ち上げを遅らせてしまった(私たちは本当に悲しい)このグリッチを除いて、私はそれを愛しています。私は読んだり聞いたり、見たり、見逃したりすることはありません。

+6

私は、Nginxがカーネルスペースを離れることなくディスクからワイヤに直接バイトをスラッシングするために['sendfile'](http://linux.die.net/man/2/sendfile)を呼び出すと思いますJavaScriptはこれよりもはるかに多くの作業を行います。 –

答えて

21

ノードベンチマークの問題は、静的ファイルをV8ヒープ内の変数に格納することです。 V8はメモリを処理する方法のため、割り当てられたオブジェクトのアドレスが実行時に変更される可能性があるため、javascript変数に含まれるデータをネットワークに直接送信することはできません。したがって、V8はすべての要求で1.8MB文字列のコピーを作成する必要があります。それはパフォーマンスを殺します。あなたは何ができるか

Bufferを使用することです:

置き換えますとlongAssString = fs.readFileSync(pathToABigFile, 'utf8');

longAssString = fs.readFileSync(pathToABigFile);

を使用すると、バッファ内の静的ファイルを持ってそのように、バッファがV8sヒープの外に保存されていますネットワークに送られるときにコピーを必要とせず、したがってはるかに高速でなければならない。

+0

説明に感謝し、大きな違いをもたらしたうわー。それは0.4〜0.7までです!ありがとうstewe .. – Devrim

+2

私は助けることができてうれしいです:) – stewe

関連する問題