linux - 为什么 'wget --page-requisites' 非常慢

标签 linux performance shell wget

目标

我的目标是在浏览器请求和显示页面的同时,下载一个网页以离线使用全部功能。

问题

以下命令下载页面并使其完全离线运行,但大约需要 35 秒,而硬刷新浏览器请求并在大约 5 秒内显示页面。有人可以帮助我理解为什么我的 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 协议(protocol)可能会因为每个文件的额外调用而减慢它的速度,所以我添加了 --no-check-certificate,但这没有任何作用。
  • 我读到 IPv6 可能存在问题,所以我添加了 --inet4-only,但这没有任何作用。
  • 我读到 dns 会减慢速度,所以我添加了 --no-dns-cache,但这没有任何作用。
  • 我想也许 wget 一次一个地顺序下载 Assets ,所以我尝试通过删除 --convert-links 添加 来同时运行 3 到 16 个线程/进程的多个命令--no-clobber 希望同时下载多个文件,并且在下载所有文件后我可以再次运行命令删除 --no-clobber--page-requisites 并添加 --convert-links 以使其完全离线运行,但这没有任何作用。我还认为多线程会加快速度,因为它会通过一次执行多个来消除 https 检查的延迟,但我没有观察到这一点。
  • 我阅读了一篇关于以 root 用户身份运行命令以防给定用户有任何限制的文章,但这没有任何作用。

最佳答案

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

(可以使用 libcurl 的 curl_multi api 制作一个脚本来执行您的 wget 命令正在执行的操作,这可以同时使用多个连接和传输压缩,但这会是很多工作)

关于linux - 为什么 'wget --page-requisites' 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56614863/

相关文章:

c - 如何在同一台机器上以编程方式获取通过AF_INET套接字连接到我的代理的进程的PID?

linux - 使用sudo时如何保持环境变量

php - 将值计算从 SQL 移到 PHP 层是否更好?

linux - 为什么 OS X 10 中的默认 shell 与 Linux(Mint、Lubuntu...)中的默认 shell 看起来不同?

接受多个参数的 Bash CLI

linux - 如何让 Jenkins 服务器将 bash 代码推送到不同的服务器?

linux - 在 Linux 中如何通知用户空间应用程序驱动程序已收到中断?

java - tomcat服务器上Spring应用程序CPU利用率高

html - 如何解决为响应目的缩放图像的性能问题?

linux - 在 shell 脚本中通过 fork() 父进程创建子进程