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

使用nodejs.org主页上的相同代码.提供1.8Mb的静态文件.和Nginx一样,注意区别.

代码:http://pastie.org/3730760

截屏视频:http://screencast.com/t/Or44Xie11Fnp

如果您知道任何阻止这种情况发生的事情,请分享,因此我们不需要部署nginx服务器并使我们的生活复杂化.

PS1.该测试用节点0.6.12完成.出于好奇,我降级到0.4.12只是为了检查它是否是一个倒退,相反,它更糟糕.同一个文件使用25%两次.

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

最佳答案
节点基准测试的问题在于您将静态文件存储在V8堆内的变量中.由于V8处理内存的方式,它不能直接将javascript变量中包含的数据发送到网络,因为分配对象的地址可能会在运行时发生变化,因此V8必须在每个请求上复制1.8MB字符串,当然这会杀死表演.

你可以做的是使用Buffer

replace:longAssString = fs.readFileSync(pathToABigFile,’utf8′);

with:longAssString = fs.readFileSync(pathToABigFile);

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

转载注明原文:node.js – 为什么Nodejs提供的CPU占用率比Nginx高80倍? - 代码日志