浏览器用来处理/理解HTML的内部机制是什么?

浏览器用来处理/理解HTML的内部机制是什么?,html,parsing,browser,Html,Parsing,Browser,浏览器如何理解HTML 为使浏览器以适当的可视方式呈现HTML,内部进行的实际处理是什么?这取决于特定的浏览器,但一般过程如下所示: 阅读HTML并将其解析为DOM树 加载链接资源(样式表、脚本、图像、媒体) 计算页面布局(位置、大小、颜色、字体等) 呈现页面 在现代浏览器中,这些操作部分并行运行,使事情比看上去复杂得多 如果你想知道更多细节,你可以看看源代码——至少Firefox(和其他基于Gecko的浏览器)和WebKit(谷歌Chrome和Safari的基础)是开源的。这是一个比第一次被问

浏览器如何理解HTML


为使浏览器以适当的可视方式呈现HTML,内部进行的实际处理是什么?

这取决于特定的浏览器,但一般过程如下所示:

  • 阅读HTML并将其解析为DOM树
  • 加载链接资源(样式表、脚本、图像、媒体)
  • 计算页面布局(位置、大小、颜色、字体等)
  • 呈现页面
  • 在现代浏览器中,这些操作部分并行运行,使事情比看上去复杂得多


    如果你想知道更多细节,你可以看看源代码——至少Firefox(和其他基于Gecko的浏览器)和WebKit(谷歌Chrome和Safari的基础)是开源的。

    这是一个比第一次被问到时更大的问题

    幕后发生了很多事情。HTML被解析,脚本被定位,资源被加载,其中一些需要被解析。样式表增加了乐趣。脚本可以通过在加载文档时重写文档来创建更多工作。在前进的道路上,必须解决明显的安全问题。在每一步中,你必须假设每一页都有可能颠覆整个计算机,抵御你能想到的每一次攻击,以及你今天想不到的每一次攻击

    这还远没有一个全面的清单


    Mozilla Firefox背后的渲染引擎就是一个完整源代码的好例子。它维护得很好,速度很快,完全符合标准,大约有1000名代码审阅者和攻击者可以做到这一点。

    这确实不是我的领域,但对于任何语言,计算机都必须解析它,并构建它的内部表示

    在5之前的HTML版本中,每个浏览器都决定如何解析HTML本身。从HTML5开始,HTML规范实际上定义了如何解析HTML

    并非所有浏览器都实现了这一点(可能没有),但WebKit团队至少正在进行这方面的工作,如果您正在学习解析HTML,那么看看他们的工作,或者HTML5规范,可能是一个很好的开始


    我想解析非常复杂:)我想主题太宽泛了;)是的,没有人知道这个问题的真正答案。这就像问“谷歌在搜索结果中如何对网站进行排名?”我们有理论,但没有结论性的答案。@RPM,两个主要的渲染器(WebKit和Gecko)都是免费的、开源的。这是一个花时间去理解它们的问题。当然,直接切入并不总是最好的学习方式。@RPM:总结一下Matthew所说的:胡说八道。浏览器会内置Html解析器吗?@Multiplexer-当然会……这意味着所有浏览器都会有自己的解析器来解析Html。这是真的吗?这就是为什么HTML页面的呈现在浏览器之间没有什么不同。他们有自己的解析器、自己的呈现引擎和自己的javascript引擎。特别是在开源浏览器中,部分功能由多个浏览器使用:例如,Safari和Google Chrome都使用WebKit渲染引擎。@Multiplexer:这是问题的一部分,但不一致的渲染主要是由于渲染引擎,而不是HTML解析器。SGML(因此也包括HTML)解析是一个相当古老的问题,已经解决了好几次——呈现不断发展,并且容易出现错误。5之前的HTML版本也有一些规范。只有一些浏览器决定遵循它们,而其他浏览器则没有。此外,该规范没有规定任何特定的解析算法或技术,它只定义语法以及浏览器应该如何解释它。@tdammers:我的印象是,HTML 4和更早版本的规范没有任何细节级别,对于编写解析器来说,这些细节级别需要特别的帮助,所以实际上他们没有定义如何解析HTML。(我自己对此没有意见,因为我从来没有接近于为任何东西编写解析器。)@Paul,IMHO问题本质上是没有浏览器真正遵循任何版本的HTML规范。每个浏览器都有其独特之处。并根据DOCTYPE(如果有的话)修补这些怪癖。HTML4对自己的描述足够好了。没人在乎。在web上安装并使用HTML验证程序,然后尽量不要因为通过的站点太少而感到沮丧。(在SO的这个页面上有24个SGML解析错误,因为我根据HTML验证器FF扩展键入了这些错误。)@RBerteig:据我所知,HTML 4规范和早期规范没有定义错误内容的处理方式,而HTML5却定义了错误内容的处理方式。这似乎对实现者来说意义重大(尽管,正如我所说,我从来没有为任何东西编写过解析器)。@Paul,这一锐利的优势之所以重要,是因为基本上没有网站符合标准。HTML5的最终目的是宣布不合规性为新标准。这有点骗人,我也不希望它被完全采用。