4

nodejs.orgホームページにあるのと同じコードを取ります。1.8Mbの静的ファイルを提供します。そして、Nginxでも同じことをして、違いを見てください。

Code : http://pastie.org/3730760

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

これを防ぐための何かを知っている場合は共有してください。nginxサーバーをデプロイして生活を複雑にする必要はありません。

ps1。このテストはノード0.6.12で実行されます。好奇心から、それがリグレッションであるかどうかを確認するためだけに0.4.12にダウングレードしましたが、逆に、それはもっとひどいものでした。同じファイルが25%を2回使用しました。

ps2。この投稿はnodejsの嫌いではありません-私たちはnodejsを使用していますが、実際に起動を遅らせ(私たちを本当に悲しくさせた)このグリッチを除いて、私たちはそれを愛しています。私は読んだり、聞いたり、見たり、出くわしたりしたことはありません。

4

1 に答える 1

21

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

あなたができることはバッファを使用することです:

交換:longAssString = fs.readFileSync(pathToABigFile, 'utf8');

と:longAssString = fs.readFileSync(pathToABigFile);

そうすれば、静的ファイルをバッファに保存できます。バッファはV8ヒープの外部に保存され、ネットワークに送信するときにコピーを必要としないため、はるかに高速になります。

于 2012-04-06T06:30:12.983 に答える