zoukankan      html  css  js  c++  java
  • 浏览器运行原理

    一:浏览器简介

      1、浏览器是指可以显示网页服务器或者文件系统的html文件(标准通用标记语言的一个应用)内容,并让用户与这些文件交互的一种软件。

      2、浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示您选择的网络资源。

      3、目前的主流浏览器有五个:Internet Explorer 、Firefox、Safari、Chrome、和Opera。

      4、浏览器按照引擎分类:

          (1)Trident引擎:Internet Explorer

          (2)Webkit引擎 : Chrome

               (3)Gecko引擎:Firefox

          (4)Prosto引擎:早期Opera采用,后用webkit引擎。

    二:浏览器的主要构成

    浏览器的主要界面包括:

      1、用户界面:包括地址栏、后退/前进按钮、书签目录等、也就是你说看到的除了用来显示你所请求页面的主窗口之外的其他部分。

      2、浏览器引擎:用来查询及操作渲染引擎的接口。

      3、渲染引擎:用来显示引擎的内容,例如、如果请求内容为html、它负责解析html及css、并将解析后的结果显示出来。

      4、网络:用来完成网络调用,例如http请求,它具有平台无关的接口,可以在不同平台上工作。

      5、UI后端:用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用操作系统的用户接口。

      6、JS解析器:用来解释执行JS代码。

      7、数据存储:属于持久层,浏览器需要在硬盘中保存类似cookie的各种数据,HTML5定义了web database技术,这是一种轻量级完整的用户端存储技术。

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

      1、渲染引擎

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

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

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

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

      1.1解析

        1.1.1与上下文无关的语法

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

        1.1.2解析器

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

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

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

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

      HTML 解析器的任务是将 HTML 标记解析成解析树。 HTML 的词汇和语法在 W3C 组织创建的规范中进行了定义,html不能简单的用解析所需的上下文无关文法来定义。

           浏览器为html定制了专属的解析器。 Html5规范中描述了这个解析算法,算法包括两个阶段——符号化和构建树。

      HTML 解析器的任务是将 HTML 标记解析成解析树。 HTML 的词汇和语法在 W3C 组织创建的规范中进行了定义,html不能简单的用解析所需的上下文无关文法来定义。

           浏览器为html定制了专属的解析器。 Html5规范中描述了这个解析算法,算法包括两个阶段——符号化和构建树.3

      1.3CSS解析

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

           Webkit使用Flex和Bison解析生成器从CSS语法文件中自动生成解析器。

      2、JS引擎

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

    四:前端处理流程简介

      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文件、图片文件、音视频等文件,处理过程类似上面的步骤在此不详述。

  • 相关阅读:
    MTU 理解和遇到的一些问题
    tm使用
    C++字符串中转义符
    安卓系统修改host文件简单教程
    公有继承的一个理解
    模板打印函数
    linux 设置时区
    ACE中的inline
    SecureCRT中脚本进行交互,发送Ctrl+C
    C++中多态的实现原理
  • 原文地址:https://www.cnblogs.com/ayk1002/p/10619639.html
Copyright © 2011-2022 走看看