【发布时间】:2013-01-11 07:05:16
【问题描述】:
我在玩 node.js,发现这个简单的程序运行得非常慢,我什至没有等到 3 分钟过去后花了多长时间。
var fs = require ('fs')
var s = fs.createWriteStream("test.txt");
for (i = 1; i <= 1000000; i++)
s.write(i+"\n");
s.end()
我尝试使用不同的值,发现 1-112050 需要 3 秒,而 1-112051 需要一分钟。这种突然下降很奇怪。 python 中的相同程序或等效的 shell 脚本“seq 1 112051”在合理的时间内(0-2 秒)运行。
请注意,这个 node.js 应用运行得更快:
var fs = require('fs')
, s = []
for (var i = 1; i <= 1000000; i++) s.push(i.toString())
s.push('')
fs.writeFile('UIDs.txt', s.join('\n'), 'utf8')
谁能向我解释为什么 node.js 会这样,以及为什么下降如此突然?
【问题讨论】:
-
我可以确认这发生在我的 Linux VM 上:
0m2.372s与1m0.039s。这个数字如此圆的事实让我认为这可能是写入流深处的超时。我会仔细研究一下。 -
另外,当使用
strace时,它在第一种情况下显着减慢 - 到0m7.259s但在第二种情况下速度相同 -1m6.462s,让我怀疑更进一步。 -
数据的size是与退化性能直接相关的(如果是,大小是多少,以字节为单位)还是number i> 的
write电话?
标签: node.js performance loops file-io io