浏览器运行原理

(一)介绍

  浏览器可以说是使用最广泛的软件,而且前端工程师很有必要了解浏览器的工作原理

  目前使用的主流浏览器有5个,

1.按照引擎分类如下:

    Trident引擎:Internet Explorer
    Webkit引擎:Chrome(28版本后基于blink,blink是webkit的一个分支)和Safari
    Gecko引擎:Firefox

    Presto引擎:早期Opera采用,后用webkit引擎

    其中Firefox、Chrome及Safari,Safari是部分开源的。而根据W3C(World Wide Web Consortium万维网联盟)的浏览器统计数据,当前(2011年5月)Firefox、Safari及Chrome的市场占有率综合已接近60%。

(二)浏览器的主要组件

(1)用户界面 (User Interface):  包括地址栏、 前进/后退按钮、 书签菜单等。 除了浏览器主窗口显示的请求的页面外,其他显示的各个部分都属于用户界面。其他显示的各个部分都属于用户界面。

(2)浏览器引擎 (Browser engine ):  在用户界面和呈现引擎之间传送指令。

(3)渲染引擎 (Rendering engine): 负责显示请求的内容。 如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。

(4)网络 (Networking):  用于网络调用,如 HTTP 请求。 其接口与平台无关,为所有平台提供底层实现。

(5)用户界面后端 (UI Backend ): 用于绘制基本的窗口小部件,比如组合框和窗口。 其公开了与平台无关的通用接口,而在底层使用操作系统的用户界面方法。

(6) JavaScript 解释器 :  用于解析和执行 JavaScript 代码。

(7)数据存储 - 这是持久层(Data Persistence) :浏览器需要在硬盘上保存各种数据,例如 Cookie。 新的 HTML 规范(HTML5) 定义了“网络数据库” ,这是一个完整的浏览器内数据库。

              

(三)浏览器内核工作原理简介

3.1渲染引擎

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

渲染引擎解析HTML文档,并将文档中的标签转化为DOM节点树,即” 内容树” 。

同时,它也会解析外部CSS文件以及style标签中的样式数据。 这些样式信息连同HTML中的” 可见内容” 一道,被用于构建另一棵树——” 渲染树(Render树)” 。

渲染树构建完毕之后,将会进入” 布局” 处理阶段,即为每一个节点分配一个屏幕坐标。 再下一步就是绘制(painting),即遍历render树,并使用UI后端层绘制每个节点。

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

DOM:文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。 在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。

渲染引擎解析:
解析一个文档即将其转换为具有一定意义的结构——编码可以理解和使用的东西。 解析的结果通常是表达文档结构的节点树,称为解析树或语法树。

3.1.1 解析

  3.1.1.1 与上下文无关的语法所有可以解析的格式都对应确定的语法(由词汇和语法规则构成),这称为与上下文无关的语法。 这里先说要说明的是:CSS、 JavaScript是与上下文无关的语法,而HTML不是与上下文无关的语法。  

  3.1.1.2 解析器解析的过程可以分成两个子过程:词法分析和语法分析。

  1、词法分析是将输入内容分割成大量标记的过程。 标记是语言中的词汇,即构成内容的单位。

  2、语法分析是应用语言的语法规则的过程。

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

3.1.2 HTML解析
HTML 解析器的任务是将 HTML 标记解析成解析树。 HTML 的词汇和语法在 W3C 组织创建的规范中进行了定义,html不能简单的用解析所需的上下文无关文法来定义。浏览器为html定制了专属的解析器。 Html5规范中描述了这个解析算法,算法包括两个阶段——符号化和构建树,Html解析流程如图1-3所示。

                 

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

3.1.3 CSS解析
css属于上下文无关文法,可以用前面所描述的解析器来解析。 Css规范定义了css的词法及语法文法。 每个符号都由正则表达式定义了词法(词汇表),语法用BNF(由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集)进行描述。
Webkit使用Flex和Bison解析生成器从CSS语法文件中自动生成解析器。

3.2 JS引擎

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

(四)前端处理流程简介

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

1、输入url

2、查看浏览器缓存,看是否有缓存,如果有缓存,继续查看缓存是否过期,如果没有过期,直接返回缓存页面,如果没有缓存或者缓存过期,发送一个请求。

3、浏览器解析url地址,获取协议、主机名、端口号和路径。

4、获取主机ip地址过程

(1)浏览器缓存

(2)主机缓存

(3)hosts文件

(4)路由器缓存

(5)DNS缓存

(6)DNS递归查询

5、浏览器发起和服务器的TCP连接,执行三次握手(略)

6、三次握手连接后,浏览器发送一个http请求(这部分是重点,请查询相关资料,详细了解http协议关于请求格式和重要的几个请求头字段含义)。

7、服务器收到请求,转到相关的服务程序,期间可能需要连接并操作数据库(主要分get和post请求)。

8、服务器看是否需要缓存,服务器处理完请求,发出一个响应(这部分也是重点,请查询资料了解http响应头各个字段的含义)

9、服务器并根据请求头包含信息决定是否需要关闭TCP连接(如需关闭,则需要四次挥手过程)

10、浏览器对接收到的响应进行解码

11、浏览器解析收到的响应并根据响应的内容(假如是HTML文件)进行构建DOM树,构建render树,渲染render树等过程

12、处理嵌入的其他资源如css文件、js文件、图片文件、音视频等文件,处理过程类似上面的步骤在此不详述。

(五)参考资料

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各种引擎介绍

原文地址:https://www.cnblogs.com/zt2019/p/wangluo.html

时间: 2024-08-29 13:39:49

浏览器运行原理的相关文章

html的运行原理

     html的运行原理      1.本地运行       html 文件 使用 浏览器(软件)        视频文件   使用 暴风软件       2,远程访问运行          在100%情况(除了自己测试外)是远程访问html文件        html的基本结构         不管这个html 文件有多复杂,它的基本结构式          <元素 属性='属性值'...>内容</元素>          如果没有内容,可以这样写          <

Nginx FastCGI的运行原理

一.FastCGI 1.介绍 CGI全称通用网关接口 Commmon Gateway Interface 用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上. 传统CGI接口方式性能较差,由于每次HTTP服务器遇到动态程序需要重启解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发时,几乎是不可能的,因此诞生了FastCGI.另外传统的CGI接口方式安全性也很差 一个可伸缩地.高速地在HTTP服务器和动态脚本语言间通信的接口 接口在linux下是socke

Web的运行原理

1.web工作原理 我是学习PHP网站建设的,那么网站在客户端和服务端的运行是网站运行的根本所在,那个这个运行过程是怎样的呢?我们一探就将! Web:万维网(WorldWideWeb) 服务器:我们把提供(响应)服务的计算机称作服务器(Server).  客户端:接受(请求)服务的计算机称作客户机(Client),也叫工作站(Workstations). 1.1服务器端和客户端连接原理 很简明的意思,就是在客户端请求数据,然后把服务的请求执行结果反馈给客户端. 客户机/服务器的这种计算机间的协作

Web程序的运行原理及流程(一)

自己做Web程序的开发也有两年多了 从最开始跟风学框架  到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来  我当时第一次做WEB项目看的书是struts2 + spring + hibernate 从入门到精通 迷迷糊糊的看完了  顺着步骤一步步搭建环境  也不知道花了多久才跑通  其实框架帮我做了很多事情 我自己那个时候都不知道 现在 我建议使用框架的同时 多注意框架到底帮你做了什么 这对一个web程序员的进阶非常重要 以后也会

第一节 环境的配置,网站运行原理,模式,代码风格

一.学习php之前所需要做哪些准备呢? 安装phpstudy 测试配置环境是否安装成功 个人电脑安装phpstudy时将站点默认为www目录,在根目录下面新建一个(ceshi.php)页面用来测试环境是否配置成功. 访问站点文件,切莫直接点击打开页面,这样不属于服务器站点访问. 在浏览器地址栏中输入localhost/ceshi.php即可访问.(由于站点默认为www,所以只需要输入localhost/ceshi.php) 二.网站的运行原理 访客-----请求----DNS服务器---指向服务

WAMP运行原理

Apache运行原理 Apache的诸多功能都是通过模块进行加载的,自己本身并不具备那么多功能. php文件动态网页请求原理 请求步骤: 1. 用户在浏览器中输入需要访问的网站的域名以及具体要请求的网页文件 2. 域名解析:先找本地hosts文件,再找互联网上的DNS 3. web服务器接收请求,获取请求文件index.php 4. 将index.php文件交给php引擎处理 5. php引擎解析php代码,如果要连接数据库的话就调用mysql扩展,去操作数据库,最终解析完变成html文件 6.

JavaScript运行原理解析

写在前面的话: 发现使用了那么长时间的Javascript,但是对其运行原理还是不清晰,今天特意总结一下,把大神们的理论和自己的总结都记录到下面: 1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够"读懂"JavaScript代码,并准确地给出代码运行结果的一段程序.比方说,当你写了 var a = 1 + 1; 这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2. 学过编译原理的人都知道,对于静态语言来

Silverlight运行原理

Silverlight运行原理 Silverlight通过什么方式和服务器端的托管代码进行交互. Silverlight也许是把托管dll下载到本地执行. 用工具跟踪http请求后,果然如此. 1. IE加载页面后.IE缓存中加载了 HTML页面.Silverlight.JS.XAP应用程序包. clip_image002[7] 2.FF调试网络通信发现.先加载HTML页面-- Silverlight.JS---得到一个LInkID--- XAP应用程序包—安装Silverlight的图片 cl

ASP.NET运行原理

1,ASP.NET运行原理: 客户端向服务器发出请求 → 服务器处理请求→ 处理好的数据以报文发给浏览器 → 浏览器显示请求结果 2,Chrome浏览器,查看请求过程:F12打开浏览器的调试窗口: 3,添加一般处理程序,查看 请求→处理→响应 的过程 // ProcessRequest中,对请求做出处理后返回数据 public void ProcessRequest(HttpContext context) { //context.Response.ContentType = "text/pla