• How Browsers Work


    这篇随笔并非全文照着翻译,如果需要看原版,请自行使用浏览器自带翻译,我这边只是截取一些个人关注点,截取部分图片。

    浏览器主要组件:

    1,用户界面

    2,浏览器引擎:查询和操作渲染引擎的界面

    3,渲染引擎:负责显示请求的内容。这里主要是负责解析和显示。

    4,网络:如HTTP请求

    5,UI后端:绘制组合框和窗口等部件

    6,JavaScript解释器:解析和执行JavaScript代码

    7,数据存储:保存硬盘上的数据,包括cookie,storage,indexDB等

    渲染引擎

    Firefox使用的Gecko,Safari和Chrome使用的Webkit。webkit是Linux平台的引擎启动,由Apple修改以支持Mac和Windows。

    基本流程:

    1,解析HTML文档,并将标签转换成content tree“内容树”中的DOM节点

    2,解析外部css文件和样式元素,创建render tree“渲染树”

    3,给渲染树进行layout布局,给每个节点一个确切的坐标

    4,painting“绘画”渲染树,并且将每个节点用UI后端图层进行绘制。

    这里截一张原版图:

    但是Webkit和Gecko的渲染引擎流程有部分不同,先放图:

    其实大部分都差不多,两个最大的不同点是:

    1,Gecko在HTML和DOM树之间有一个Content Sink,是用来制作DOM元素的工厂

    2,Gecko里的layout布局被叫做Reflow回流

    解析器-Lexer组合(我也不懂这啥意思,还是名字就叫这个)

    解析分为两个子过程:

    1,词法分析:将输入内容分解为大量标记的过程。标记是语言中的词汇,也就是构成内容的单位,也就是我们普通话对应的字典里面所有的单词。

    2,语法分析:应用语言语法规则。

    解析器通常先让词法分析器(标记器)将输入的内容分解为有效标记,然后解析器根据语言规则进行语法分析文档结构,从而构建解析树。这里词法分析器的作用是知道如何去除不相关的字符,如空格和换行符。

    解析的过程是不断重复的,因为它是一个标记一个标记解析的,解析器每次从词法分析器处取一个标记,然后尝试用这个标记去匹配一条语法规则,如果匹配了,就把这个标记对应的节点添加到解析树上,然后继续去取。如果没有匹配到,就先将这个标记保存在内部,然后先去取下一个,直到所有保存的标记能够匹配一条语法规则。如果解析结束时都没有匹配到规则,那么解析器就抛出异常,意味着语法错误或者文档无效。

     

    end

  • 相关阅读:
    声明对象指针,调用构造、析构函数的多种情况
    [C++ STL] 常用算法总结
    [C++ STL] map使用详解
    [C++ STL] set使用详解
    [C++ STL] list使用详解
    [C++ STL] deque使用详解
    Servlet课程0424(一) 通过实现Servlet接口来开发Servlet
    CSS盒子模型
    Spring学习之第一个hello world程序
    Java基础面试题
  • 原文地址:https://www.cnblogs.com/yanchenyu/p/8446888.html
Copyright © 2020-2023  润新知