【问题标题】:Fastest way to download files in Node.js?在 Node.js 中下载文件的最快方法?
【发布时间】:2017-02-24 04:29:40
【问题描述】:

我正在尝试从 Ubuntu 服务器上的外部网站下载 PDF 文件。

我的脚本在 Node.js 中运行,尽快完成下载很重要。

文件应该直接保存到磁盘上。我找到了两种方法来实现这一点...

  1. 使用 Node 的内置 http 库,如下例所示。

    let file = fs.createWriteStream(path)
    http.get(url, response => response.pipe(file))
    
  2. 使用 Node 的 child_process 库调用 wget,如下所示。我也知道还有其他命令,例如 curl 可以使用。

    exec('wget -P ' + path + ' ' + url)
    

我知道这些示例可能是错误的编码,但仅用于说明。我还读到人们通常更喜欢使用 Node 的 http,因为它不使用任何外部库,所以更好。

但是,我只关心速度。我的问题是哪种方式下载文件最快?

我一直在查看https://www.hacksparrow.com/using-node-js-to-download-files.html,这表明wget 是最快的解决方案,但我不确定这个结论是如何得出的。

另外,这些方法是否有任何缺点(除了速度)?有没有其他我没有提到的方法?

谢谢! ????

【问题讨论】:

  • 我的意思是...在您的情况下,速度的第一竞争者将与网络相关...所有方法都将受其控制。 #2 是磁盘 io,它会再次影响所有方法。
  • 你是对的 - 但是我的网络连接速度很快。我想我也对哪个进程将使用最少的内存感兴趣。
  • 另外,我不确定为什么我的问题被否决了。人们可以在这样做之前解释一下我如何改进它吗?
  • 我告诉你我发现你的问题没有用,而且研究不充分也不会帮助你改进它。
  • 如果您担心内存使用情况(这甚至与速度有关吗?)请查看每种方法如何使用内存来执行操作。

标签: javascript node.js http curl wget


【解决方案1】:

由于网络和 io 限制,没有理由根据“速度”在您的情况下选择一种方法。下载速度和写入速度不受您的控制(以编程方式),只剩下各个方法本身的速度。由于网络和 io 具有最大速度,因此使用执行速度最快的方法并不重要,因为一旦您开始考虑下载多个文件,该方法最终会受到网络和/或 io 的限制。

使用对情况更有意义的方法。在您的情况下,如果您尝试使用 node 下载文件,对我来说使用 node.js 比使用子进程的 wget 更有意义。

【讨论】:

    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多