浏览器如何知道加载了多少页?

分享于 

4分钟阅读

电脑

  繁體

问题:

在网页加载过程中,查看浏览器进度栏有时会慢一些,我想知道浏览器是否基于页面上显示的元素的大小或者的。 元素的或者其他元素?

或者许有人已经检查过 Firefox 或者它的他浏览器的来源了解这个问题的详细信息?


回答 1:

什么是正在载入网站?

加载网页 downloading downloading。 服务器得到的内容是- - 在大多数情况下,只有通过HTTP传输的HTML文件。 首先,向站点的URL发出一个HTTP请求,如 GET http://superuser.com

,说,HTTP使用 Content-Length 字段来预先显示文件的大小。 这是浏览器可以评估的一些东西,可以猜测下载整个站点的进度。

但是,这不能覆盖HTML文件可以通过引用它们来加载的所有资源。 这些可能包括:

  • 外部图像
  • 外部样式表
  • 外部脚本
  • 图文框
  • AJAX加载

浏览器如何知道要加载多少?

现在浏览器的任务就是找到这些引用并请求它们。 因此,对于每个外部引用,浏览器都会查询它的缓存,或者发送新的HTTP请求。 对于超级用户,这将是在内容分发网络上承载的以下文件,以提高性能:

  • GET http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js - 主jQuery文件
  • GET http://cdn.sstatic.net/js/stub.js - 一些JS函数
  • GET http://cdn.sstatic.net/superuser/all.css - 样式表

你可以使用 Chrome 或者的调试器来看到这一点,当你启用时间线跟踪时。 这是加载超级用户的时间线,过滤后只显示请求。 单击以放大:

enter image description here

正如我们可以看到的,主超级用户站点需要花费最长的时间,但是从它层次结构( 例如 )。 涉及HTTP请求或者缓存请求。 所有这些也公开了 Content-Length,因这里浏览器可以很好地猜测所有这些文件的载入时间。

因为所有这些都在一个很短的时间内发生,你将不会注意到进度条中的小规模。 有时你会看到进度栏挂起2 分之一- 这可能是浏览器无法加载外部资源的速度与其他资源一样快。

浏览器如何实现这里功能?

Google Chrome

我已经查看了 Google Chrome的来源( a。k。a。 找到了这个类,发现这个类叫做 ProgressTracker.cpp。 实际上是苹果写的,所以它很可能来自于 webkit的渲染引擎。 它包括以下字段:


ProgressTracker::ProgressTracker()


 : m_totalPageAndResourceBytesToLoad(0)


, m_totalBytesReceived(0)



因这里,正如我所说,将确定资源字节的总数,并且进度将相应地改变。 有一个有趣的注释显示了第一个加载页面的实际重要性是如何提升的:

//用于使用webcore系统布局的文档,将第一个布局视为半路径点。

因此,如果加载第一页( 它的外部资源仍然要装载),则进度将为 50%。

Firefox ( 裂变 add-on )

现在还有一个稍微简单一点的。 我已经查看了分解,Firefox的进度条扩展。 如果我没有读出错误的方法,那么它可以很容易地思考。

每个网站都由许多 DOM元素组成。 通过解析第一个HTML站点,可以估计要加载的DOM元素的总数。

对于每个加载的DOM元素,增加计数器,并根据它显示进度条。


回答 2:

当浏览器从服务器请求文件时,服务器可以选择向浏览器提供文件的大小。 服务器通过发送一个 Content-Length header 命令来完成这里操作。

关于的其他信息,浏览器如何确定它正在下载的文件的大小。



bro  浏览  Loaded  
相关文章