Express + node.js:服务非常缓慢的大目录打包为tar

我刚刚开始使用web开发,而node.js + express帮助我在不那么强大的embedded式系统上快速获得简单的服务器。 当试图将270MB目录作为一个tar文件服务器时,性能对我的解决scheme并不是很好。

在得到irc的一些帮助之后,我尝试使用fstream和node-tar来提供文件,如下所示:

fstream.Reader({ type: "Directory" , path: mydir }).pipe(tar.Pack({})).on("error", function(){ res.statusCode = 500; res.end('Unable to create tarball'); }).pipe(res) 

它的工作原理,但需要大约20分钟,将270MB文件下载到我的电脑。 作为一个实验,我试图tar目标文件夹,然后scp'ed到我的电脑。 这花了1m12s + 2m17s,这是相当大的差异。

(我尝试使用节点静态服务预tar'ed文件,但在embedded式系统上运行内存不足)

任何想法可以使express + node.js解决scheme如此缓慢?

更新一些基准:

我怀疑,使用其他networking服务器将更好的静态文件服务,但我不认为这可以解释这里的重大差异。

在导致64MB tar的文件夹上进行基准testing

手册
46秒

 # on server: tar -cf foo.rar <folder> # on client scp root@<ip>/path/to/foo.rar . 

fstream + node-tar:直接
4分25秒

 fstream.Reader({type: "Directory", path: dir}).pipe(tar.Pack({})).on("error", function(){res.statusCode = 500; res.end('Unable to create tarball');}).pipe(res); 

fstream + node.tar:首先stream文件,然后服务文件
1分11秒

 fstream.Reader({type: "Directory", path: dir}).pipe(tar.Pack({})).on("error", function(){res.statusCode = 500; res.end('Unable to create tarball');}).pipe(fstream.Writer('/tmp/test.rar').on("close", function() { var rs = fs.createReadStream('/tmp/test.rar'); rs.on('data', function(data) { res.write(data); }); rs.on('end', function() { res.end(); }); }));