浏览器的工作原理

2021-08-18  本文已影响0人  Geroge1226

转自:https://blog.csdn.net/u014744118/article/details/80698602

1、前言

我们在做前端开发时候,所写的前端代码最终是已" 浏览器"形式呈现给用户。用户交互也都是基于浏览器完成,所以了解浏览器工作原理,可以更好方便我们做前端开发优化。

2、浏览器介绍

浏览器是指可以显示网页服务器或者文件系统的HTML文件(标准通用标记语言的一个应用)内容,并让用户与这些文件交互的一种软件。
浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示您选择的网络资源。这里所说的资源一般是指 HTML 文档,也可以是 PDF、 图片或其他的类型。 资源的位置由用户使用URI(统一资源标符)指定。多年以来,各浏览器都没有完全遵从这些规范,同时还在开发自己独有的扩展程序,这给网络开发人员带来了严重的兼容性问题。 如今,大多数的浏览器都是或多或少地遵从规范。

3、浏览器的组件

(1)用户界面 : 包括地址栏、 前进/后退按钮、 书签菜单等。 除了浏览器主窗口显示的请求的页面外,其他显示的各个部分都属于用户界面。其他显示的各个部分都属于用户界面。
(2)浏览器引擎 :在用户界面和呈现引擎之间传送指令。
(3)渲染引擎 : 负责显示请求的内容。 如果请求的内容是 HTML,它就负责解析 HTMLCSS 内容,并将解析后的内容显示在屏幕上。
(4)网络 :用于网络调用,如 HTTP 请求。 其接口与平台无关,为所有平台提供底层实现。
(5)用户界面后端 :用于绘制基本的窗口小部件,比如组合框和窗口。 其公开了与平台无关的通用接口,而在底层使用操作系统的用户界面方法。
(6) JavaScript 解释器 : 用于解析和执行 JavaScript 代码。
(7)数据存储 : 这是持久层。 浏览器需要在硬盘上保存各种数据,例如 Cookie。 新的 HTML 规范(HTML5) 定义了“网络数据库” ,这是一个完整的浏览器内数据库。

组件结构图如下:


4、浏览器内核工作原理简介

4.1 - 渲染引擎

渲染引擎在浏览器窗口中显示所请求的内容,浏览器内核分成两部分:渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎,所以渲染引擎也称为浏览器内核。渲染引擎一开始会从网络层获取请求文档的内容,通常以8K分块的方式完成。 获取了文档内容之后,渲染引擎开始正式工作,其基本流程如图所示:


4.2 - 渲染引擎工作原理

渲染引擎解析HTML文档,并将文档中的标签转化为DOM节点树,即” 内容树” 。 同时,它也会解析外部CSS文件以及style标签中的样式数据。 这些样式信息连同HTML中的” 可见内容” 一道,被用于构建另一棵树——” 渲染树(Render树)” 。 渲染树构建完毕之后,将会进入” 布局” 处理阶段,即为每一个节点分配一个屏幕坐标。 再下一步就是绘制(painting),即遍历render树,并使用UI后端层绘制每个节点。

注意:这个过程是逐步完成的,为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局渲染树。 它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。

DOM:文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。 在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。
渲染引擎解析:
解析一个文档即将其转换为具有一定意义的结构——编码可以理解和使用的东西。 解析的结果通常是表达文档结构的节点树,称为解析树或语法树。

4.3 - 解析

解析通常是一个迭代的过程。 通常,解析器会向词法分析器请求一个新标记,并尝试将其与某条语法规则进行匹配。 如果发现了匹配规则,解析器会将一个对应于该标记的节点添加到解析树中,然后继续请求下一个标记。 如果没有规则可以匹配,解析器就会将标记存储到内部,并继续请求标记,直至找到可与所有内部存储的标记匹配的规则。 如果找不到任何匹配规则,解析器就会引发一个异常。 这意味着文档无效,包含语法错误。

符号化是词法分析的过程,将输入解析为符号,html的符号包括开始标签、 结束标签、 属性名及属性值。符号识别器识别出符号后,将其传递给树构建器,并读取下一个字符,以识别下一个符号,这样直到处理完所有输入。

4.4 - JS引擎

JS引擎是一个专门处理JS脚本的虚拟机,专门设计来解释和执行的 JavaScript 代码。 JS引擎会加载你的源代码,把它分解成字符串,把这些字符串转换成编译器可以理解的字节码,然后执行这些字节码。不同浏览器有不同的JS引擎 ,不同浏览器的js引擎如表1-1所示。


5、前端处理流程简介

这个流程大家可以参考网上很多人总结的各个版本的从输入一个url到看到页面,发生了什么过程。在这里我用自己的话简单概括为以下几点(仅供参考,欢迎指正):

(1)浏览器缓存
(2)主机缓存
(3)hosts文件
(4)路由器缓存
(5)DNS缓存
(6)DNS递归查询

6、参考资料

  1. How Browsers Work: Behind the Scenes of Modern Web Browsers,Tali Garsiel,
    http://taligarsiel.com/Projects/howbrowserswork1.htm
  2. How Browsers Work中文译文 [浏览器的工作原理:新式网络浏览器幕后揭秘 塔利·加希
    尔 ]https://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/#The_browsers_
    we_will_talk_about
  3. http://grosskurth.ca/papers/browser-refarch.pdf
  4. http://tools.yesky.com/101/11197101_2.shtml, 各大浏览器 CSS3 和 HTML5 兼容速查表
  5. http://www.cnblogs.com/gdutbean/archive/2012/02/21/2362003.html JS各种引擎介绍
上一篇 下一篇

猜你喜欢

热点阅读