浏览器内核又称排版引擎(layout engine)、浏览器引擎(browser engine)、页面渲染引擎(rendering engine)
从输入网址到展示内容浏览器经历的过程

link元素不会阻塞Dom tree的解析过程,但会阻塞render tree的生成,因为需要Dom tree和cssom合成render tree,具体取决于浏览器的优化Render tree 和Dom tree不是一一对应的关系,因为display:none的元素不会出现在render tree上display tree)中的所有节点的宽高、和位置信息推荐阅读 浏览器如何工作

Dom元素大小位置等属性修改后,渲染引擎会重新进行布局(layout)生成新的render tree的过程
触发回流的操作
Dom结构修改width、height、pading等)resize(修改了窗口尺寸)getComputedStyle 方法获取尺寸、位置信息(取决于浏览器实现)从render tree重新绘制的成像素点的过程
触发重绘的操作
生成图层的时候,某些属性会生成新的图层
产生合成图层的属性
position:fixed3D Transformvideo、canvas、iframe元素Dom Tree解析是同步的,遇到script标签,会等待script下载完成后执行,如果js文件较大或执行报错,会阻塞Dom tree的继续构建
尽管 浏览器会做优化,即使js报错,script标签之前的内容仍会被渲染
利用上异步加载,可以提升性能,缩短首屏渲染时间,可以通过在script标签添加defer或async属性实现
Dom tree构建,异步下载Dom tree构建完成,DomContentLoaded事件回调之前执行script标签,可以保证执行顺序和书写顺序一致Dom tree构建,异步下载async属性script标签不能保证执行顺序由浏览器引擎解析html获得js源代码,发送到js引擎,先进行词法分析,生成token,再进行语法分析,生成抽象语法树(AST),最后进行执行

抽象语法树:AST, Abstract Syntax Tree
词法分析: 把代码语句中的语句token化,生成各类token
语法分析: 把上面的token分类,分析语句的作用,对应的语法规则

中文版
