为什么“ wget --page-conditions”非常慢

时间:2019-06-15 23:14:25

标签: linux performance shell wget

目标

我的目标是下载单个网页以脱机运行,同时需要浏览器请求并显示该页面。

问题

以下命令下载页面并使其脱机完全可用,但是硬刷新的浏览器请求并显示页面大约需要5秒钟,大约需要35秒。有人可以帮我了解为什么我的wget命令花费的时间这么长以及我如何使其更快?还是我可以在任何位置或聊天小组寻求帮助?衷心感谢您提供的任何帮助。

wget --page-requisites --span-hosts --convert-links --adjust-extension --execute robots=off --user-agent Mozilla --random-wait https://www.invisionapp.com/inside-design/essential-steps-designing-empathy/

上面的命令提供以下时间统计信息:

Total wall clock time: 35s
Downloaded: 248 files, 39M in 4.2s (9.36 MB/s)

为什么挂钟时间比下载时间长得多,并且有办法使其更快?

更多信息和尝试的解决方案

  • 我删除了--random-wait,因为我认为这可能会增加每个文件请求的时间,但这没做。
  • 我认为https协议可能会因对每个文件进行额外的来回调用而使其速度变慢,因此我添加了--no-check-certificate,但这没有任何作用。
  • 我读到IPv6可能有问题,所以我添加了--inet4-only,但这没做。
  • 我阅读了dns可能会减慢速度,所以我添加了--no-dns-cache,但这没做。
  • 我以为wget可能一次一次依次下载资产,所以我尝试通过删除--convert-links添加--no-clobber来同时运行3至16个线程/进程的多个命令。多个文件将同时下载,下载完所有文件后,我可以再次运行命令,删除--no-clobber--page-requisites并添加--convert-links以使其完全脱机运行,但这什么也没做。我还认为多个线程可以加快速度,因为它可以一次执行多个,从而消除了https检查的延迟,但是我没有观察到这一点。
  • 我读了一篇有关以root用户身份运行命令的文章,以防给定用户受到任何限制,但这无济于事。

1 个答案:

答案 0 :(得分:1)

wget使用单个连接并顺序下载所有内容,Web浏览器使用多个连接并同时下载所有内容,这使Web浏览器快得多。浏览器也会使用传输压缩,而wget不会(wtf wget?),这会使浏览器更快。浏览器也缓存了很多东西,这可能会使浏览器显示速度更快,因为它是从本地磁盘/内存缓存中加载未更改的内容,而不是实际下载东西,但是即使考虑到所有这些,5秒-> 35秒似乎也是很多

(可以使用libcurl的curl_multi api编写脚本来执行与wget命令相同的操作,可以同时使用多个连接和传输压缩,但这会需要很多工作)