zoukankan      html  css  js  c++  java
  • How-Browers-Work

    ##### 浏览器的主要功能

    浏览器的主要功能是展示你所选择的资源,这些资源通常是HTML文档,也可能是PDF,图像,以及其他格式内容。这些资源通过统一资源定位符(Uniform Resource Identifier, URI)来定位。

    HTML文档是通过HTML和CSS规范类具体说明的。这些规范由W3C组织维护。

    ##### 浏览器的高层结构

    1. **The user interface**
    2. **The browser engine**
    3. **The rendering engine**
    4. **Networking**
    5. **UI backend**
    6. **JavaScript interpreter**
    7. **Data storage**

    ###### The render engine

    默认渲染展示HTML,XML和图片。通过插件或扩展支持PDF之类的展示。

    渲染引擎,也就是通常所说的浏览器内核。不同浏览器使用不同的渲染引擎:

    - Firefox --> Gecko
    - Safari --> WebKit
    - Chrome --> Blink

    ##### The main flow

    * Parsing HTML to construct the DOM tree(content tree)
    * Render tree construction (add style)
    * Layout of the render tree (giving each node the exact coordinates)
    * Painting the render tree (painted node using the UI backend layer)

    这是一个渐进的过程,为了更好的用户体验,渲染引起会尽快地展示内容。当还有一部分内容还在通过网络传输过来时,另一部分内容已经被解析展示了。

    ###### Parsing-general

    解析一个文档意味着将它翻译成一个代码可以使用的**结构**。解析的结果通常是一个代表着文档结构的节点树,也叫解析树或语法树。

    ###### Grammars

    解析是基于文档所遵循的语法规则进行的。可以进行解析的格式,必须要有由**词汇**和**语法规则**构成的**确定的语法**,也被称为**上下文无关语法**。

    ###### Parser-Lexer combination

    解析可以分为**词法分析(lexical analysis)**和**语法分析(syntax analysis)**。

    * lexical analysis: 把输入转化成token(language vocabulary),即有效的构建块
    * syntax analysis: 运用language语言规则

    通过**lexer**获得有效的token block,再通过**parser**,用语法规则将这些token block结构化。

    ###### Translation

    在一些情况下,parse tree不是最终产品,而是在translation中使用的中间格式。比如编译(compilation)。

    ###### Formal definitions for vocabulary and syntax

    * vocabulary is usually expressed by **regular expressions**
    * syntax is usually defined in a format called **BNF**

    一个语言的语法必须是**上下文无关语法(context free grammar)**才可以被正则解析。上下文无关语法的一个直观定义是:语法可以通过BNF完全表达。

    ###### Type of parsers

    There are two types of parses:

    * top down parsers: 从语法的高层结构(high level structure)开始,寻找匹配的规则。
    * bottom up parsers: 从输入开始,逐步地转化为语法规则,从低层的规则(low level rules)到高层的规则(high level rules)。

    ###### Generating parsers automatically

    手写高效的解析器是很难的,不过这里有工具可以通过输入语法(vocabulary & syntax rules)自动生成解析器。

    WebKit使用了两个知名的解析器生成器:

    * Flex for creating a lexer
    * Bison for creating a parser

    ###### HTML Parser

    将HTML markup解析成parse tree。

    ###### The HTML grammar definition

    The vocabulary and syntax of HTML are defined in **specifications** created by the W3C organization.

    ###### Not a context free grammar

    相较于XML严格的语法,HTML有着较宽松的语法,这使得HTML不是上下文无法语法的,也就无法使用常规的解析器来进行解析。

    ###### DOM

    解析的输出树(解析树)是一个由DOM元素和属性节点构成的树形结构。DOM(Document Object Model)是HTML的对象表示法,以及HTML元素的接口。

    ###### The parsing algorithm

    HTML不能用常规的解析技术:

    1. 语言的宽松本质
    2. 浏览器对有名的无效HTML的容错支持
    3. 解析过程是可重入的(re-entrant),调用document.write()会更改动态更改HTML。

    HTML的解析算法由HTML5规范给出了,该算法包含两个阶段:标记化(tokenization, 也就是lexical analysis)和树构建(tree construction)。

    ###### The tokenization algorithm

    这个算法的输出是HTML token。它被表达为一个状态机。

    ###### Actions when the parsing is finished

    HTML解析完成后,开始解析执行“延迟模式”的脚本。文档状态会被设置为"complete"并且"load"事件会被触发。

    ###### CSS parsing

    CSS是上下文无关语法,可以用常规的parser直接解析。而CSS规范中定义了CSS lexical和syntax grammar。

    收刀入鞘吧!凡动刀的,必死在刀下!
  • 相关阅读:
    caffe学习笔记(七)solver优化方法
    caffe学习笔记(六)solver及其配置
    caffe学习笔记(五)Blob,Layer and Net 及其对应配置文件的编写
    caffe学习笔记(四)其他常用层及参数
    caffe学习笔记(三)激活层(Activiation Layers)及参数
    caffe学习笔记(二)视觉层(Vision Layers)及参数
    caffe学习笔记(一)数据层及参数
    外网主机A连接内网主机B
    Neural Network and DeepLearning (6.2)深度学习
    将数据库中的符点数的小数位数改为两位
  • 原文地址:https://www.cnblogs.com/qiuyi116/p/9008784.html
Copyright © 2011-2022 走看看