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)
此网站大约需要5秒钟来下载并显示所有文件,并通过浏览器进行强制刷新。
为什么挂钟时间比下载时间长得多,并且有办法使其更快?
我希望运行wget command
的时间与浏览器请求文件的时间大致相同。如果total_download_time
代表下载文件所花费的总时间,那么这与浏览器的速度理想相匹配,但是wall_clock - total_download_time = 35s - 4.2s = 30.8s
似乎花了太多时间将累积大小为248 files
的{{1}}写入磁盘。我也尝试过删除39M
并将w --convert-links
添加到wget命令中,并在终端中运行--no-clobber
(或您想要的流程实例数量wget_command & wget_command
)来生成多个并行处理下载的过程,这将更紧密地模拟浏览器如何请求文件,但不会成功。
答案 0 :(得分:1)
wget
的源镜像在github上。
printf
是here。
wall_clock
使用ptimer_*
库,该库由wget实现。向下滚动宏,我猜想在Linux系统上它使用clock_gettime
和CLOCK_MONOTONIC
来测量时间。然后计算差异start_time,end_time和wall_time。 CLOCK_MONOTONIC
是一个单调时钟,因此它表示作业实际花费了多少时间。
total_download_time
按协议递增,例如。对于ftp是here。然后,我们转到fd_read_body,并使用double *elapsed
库再次here更新ptimer_*
,在该库中,在函数条目here附近初始化了计时器。猜测函数does是什么,total_download_time
可能仅表示下载文件所花费的时间,即。等待I / O操作完成。
您的浏览器速度更快,因为它同时下载数据并且不会(那么多)写入磁盘。 wget
当前不支持并行下载。