HTML解析: 字节 ——> 字符 ——> 标记 ——> 节点 ——> dom树 html的解析是一个将字节转化为字符,字符解析成标记, 标记生成节点,节点构建成dom树。 1个字节 = 8位二进制 位:存放一位二进制数,即0或1 1个英文字符占1个字节的空间 1个中文汉字占2个字节的 英文标点占1个字节 中文标点占2个字节
字符:字母, 数字, 运算符号, 标点符号 和 其他符号 以及一些功能性的符号
标记 标记化算法: 1. 是个词法分析过程,将输入内容解析成多个标记 2. html标记:包括起始标记,结束标记, 属性名称和属性值。 3. 标记生成器识别标记,传递给树构造器,然后接受下一个字符以识别标记,如此反复直到输入结束 4. 该算法的输出结果是HTML标记
节点 由标记生成器发送给树构造器
树构建算法: 1. 在树构建阶段,以Document为根节点的DOM树也会不断的修改,向其中添加各种元素 2. 标记生成器发送的每个节点都由树构造器进行处理 3. 规范中定义了每个标记所对应的DOM元素,这些元素会在接收到相对应的标记时创建
浏览器渲染过程的一些概念:
- Repaint(重绘): 屏幕的一部分要重画,比如某个css的背景色变了,但是元素的几何尺寸没有变
- Reflow(重排): 元素的几何尺寸变了,需要重新计算RenderTree, reflow会从这个root frame 开始递归往下,依次计算所有的节点几何尺寸和位置,在reflow过程中,可能会增加一些frame,比如一个文本字符串必须被包装起来
- onload事件:当onload事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了
- DOMContentLoaded事件: 仅当DOM加载完成,不包括样式表,图片, flash
- 首屏时间: 当浏览器显示第一屏所消耗的时间, 优秀:2s 可接受: 5s, 不能容忍: 10s
- 白屏时间:现代浏览器不会等待css树(所有css文件下载和解析完成)和DOM树(整个身体标签解析完成)构建完成才开始绘制,而是马上开始显示中间结果。 所以经常在低网速的环境中,观察到页面从上至下缓慢显示完,或者先显示文本内容后再重绘成带有格式的页面内容
浏览器内核: chorme内核包括:
- base 通用代码,基础组件, 包含字符串、文件、线程、消息队列等工具类集合
- cc, Chromium compositor 的缩写 负责渲染合成
js层面谈优化: 1.