如果Web浏览器不知道文件大小,它们如何显示进度条?

时间:2010-05-07 03:12:22

标签: http browser

我正在编写一个下载管理器,我注意到我遇到的所有网页似乎都没有设置ContentLength标头,而其他媒体类型(图像)则没有。但是,当我加载页面(在Firefox中)时,我会在加载时获得进度。如果不是文件大小,那么基于什么?

2 个答案:

答案 0 :(得分:3)

由于网页可能是许多下载的总和,其中任何一个可能具有未知大小,因此与请求的项目数相比,进度更多是完成的项目数,而不是精确的字节数。我认为大多数浏览器都将dns解析作为进步的重要组成部分。

首先选择要获取主文档第一个字节所涉及的dns,重定向和其他握手的进度,例如总数的20%。当您获得主文档的第一个字节时,您的进度为20%。

您还可以为运行javascripts和进行页面布局保留一小段尾部空间。再说10%留下70%代表下载。

在下载主文档时,请计算需要下载的所有其他资源。如果有50个额外的资源,那么主文档占剩余70%下载量的2%,所以当它完成时,无论它有多大,你的进度都接近22%。随着这50个资源中的每一个到达,进展都会有所增加。

您可能会因为大小已知或甚至类型而对重量进行加权。因此,也许css文件计为1项,图像为3,电影为10。对于任何给定大小的项目,您可以更精确地增加整体进度。

简而言之,它是一个代表任意数量任务的聚合进度条。即使已知给定任务的字节数,时间也不是。

答案 1 :(得分:-1)

每个进度条都是猜测。如果你想知道Firefox做了什么猜测,它的源代码是公开查看的。