首先,我对此问题所解决的整个请求 - 响应流程不感兴趣
我想知道一旦从服务器收到html响应,浏览器内部会发生什么。提出这个问题背后的意图是了解客户端脚本的内部细节。如果您能够在抽象概念中解释Web浏览器包含的内容,那将是有益的。您可以将它们称为CSS引擎,javascript引擎等。目标是精确可视化我正在进行的Web开发。
不幸的是,我没有找到解决此问题的任何网络资源。如果有资源可以解释这些概念,请原谅我。如果这个问题太难以回答,你可以指出资源(书籍等)。
答案 0 :(得分:17)
请完成以下步骤,您应该清楚请求生命周期以及如何呈现响应。
您可以在首选浏览器中的地址栏中输入网址。
浏览器解析URL以查找协议,主机,端口和路径。
它形成一个HTTP请求(很可能是协议)
要联系主机,首先需要将人类可读主机转换为IP号码,并通过在主机上进行DNS查找来实现此目的
然后需要在指定的端口(通常是端口80)上从用户的计算机向该IP号打开一个套接字
当连接打开时,HTTP请求被发送到主机主机将请求转发到配置为侦听指定端口的服务器软件(通常是Apache)
服务器检查请求(通常只是路径),并启动处理请求所需的服务器插件(对应于您使用的服务器语言,PHP,Java,.NET,Python?)
该插件可以访问完整的请求,并开始准备HTTP响应。
要构建响应,(最有可能)访问数据库。根据请求
数据库中的数据以及插件决定添加的其他信息被合并为一长串文本(可能是HTML)。
该插件将该数据与一些元数据(以HTTP标头的形式)相结合,并将HTTP响应发送回浏览器。
浏览器接收响应,并在响应中解析HTML(概率被破坏的概率为95%)
DOM树是用破碎的HTML构建的
对HTML源中找到的每个新资源(通常是图像,样式表和JavaScript文件)向服务器发出新请求。
返回步骤3并重复每个资源。
解析样式表,并将每个样式中的呈现信息附加到DOM树中的匹配节点
解析并执行JavaScript,移动DOM节点并相应更新样式信息
浏览器根据DOM树和每个节点的样式信息在屏幕上呈现页面
您会在屏幕上看到该页面
你觉得整个过程太慢了。
答案 1 :(得分:4)
Mozilla的David Baron的精彩演讲详细讨论了这一点。它是一个名为Faster HTML and CSS: Layout Engine Internals for Web Developers的视频,它将引导您完成将DOM树渲染到屏幕的五个步骤:
答案 2 :(得分:2)
我将尝试深入解释页面渲染过程。请注意,我并没有像OP在问题中所提出的那样关注请求-响应过程。
一旦服务器向浏览器提供资源(HTML,CSS,JS,图像等),它将经历以下过程:
解析-HTML,CSS,JS
渲染-构造DOM树→渲染树→渲染树布局→绘制渲染树
网络浏览器的内部结构是什么?
为了理解以上几点所解释的页面呈现过程,我们还需要了解Web浏览器的结构。
用户界面:该用户界面包括地址栏,后退/前进按钮,书签菜单等。浏览器的每个部分都会显示,但您看到所请求页面的窗口除外。
浏览器引擎:浏览器引擎在UI和呈现引擎之间封送操作。
渲染引擎:渲染引擎负责显示请求的内容。例如,如果请求的内容是HTML,则呈现引擎将解析HTML和CSS,并在屏幕上显示已解析的内容。
网络:网络使用与平台无关的界面后面的不同平台的不同实现来处理HTTP请求之类的网络调用。
UI后端:UI后端用于绘制基本的小部件,例如组合框和窗口。该后端公开了不是平台特定的通用接口。它的下面使用操作系统用户界面方法。
JavaScript引擎: JavaScript引擎用于解析和执行JavaScript代码。
数据存储:数据存储是一个持久层。浏览器可能需要在本地保存各种数据,例如cookie。浏览器还支持诸如localStorage,IndexedDB,WebSQL和FileSystem之类的存储机制。
注意:
在渲染过程中,图形计算层可以使用通用CPU或图形处理器GPU。
在使用GPU进行图形渲染计算时,图形软件层将任务分成多个部分,因此可以利用GPU大规模并行性来进行渲染过程所需的浮点计算。
有用链接:
1. https://github.com/alex/what-happens-when
2. https://codeburst.io/how-browsers-work-6350a4234634