为什么Nodejs提供的CPU占用率比Nginx高80倍?

Dev*_*rim 4 nginx node.js

使用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%两次.

PS2.这篇文章不是nodejs讨厌 - 我们使用nodejs,我们喜欢它,除了这个故障实际上推迟了我们的发布(让我们真的很难过),而且对我来说似乎很严重.我从来没有读过,听过,看过或预料会遇到过.

ste*_*ewe 21

节点基准测试的问题在于您将静态文件存储在V8堆内的变量中.由于V8如何处理内存不能直接发送包含在JavaScript变数网络数据,因为分配的对象的地址,可以在运行时改变方式,因此V8拥有,让您1.8MB字符串的每个请求副本,确保这会杀死表演.

你可以做的是使用缓冲区:

更换: longAssString = fs.readFileSync(pathToABigFile, 'utf8');

有: longAssString = fs.readFileSync(pathToABigFile);

这样你就可以将静态文件放在缓冲区中,缓冲区存储在V8s堆之外,并且在发送到网络时不需要复制,因此速度要快得多.

  • 我很高兴我可以帮忙:) (2认同)