前期预备知识: 进程与线程 进程process:就是打开的每个程序,每个程序可以同时做很多事情,这些同时做的事情叫做线程。 进程thread:就是当前的应用,线程就是应用程序当中干活的
浏览器的运行机制,浏览器如何渲染一个页面的
1).客户端向服务器端发送请求(DNS解析,TCP协议,HTTPs/HTTP) 2).服务器响应阶段(http状态码,304缓存,http报文)
3). 浏览器在拿到服务器端返回的代码之后会在内存中开辟出一块占内存,用来给代码提供执行环境, 分配一个主线程去一行一行的解析和执行代码。 4). 当浏览器遇到link/script/img等请求后都会开辟全新的线程去加载资源文件。新开辟的空间叫做任务队列(task queue)去执行这些异步资源请求操作。 主线程继续去执行下面的操作。一直执行到最后。把html的dom结构渲染完毕------>DOM结构生成完毕
5). 主线程去任务队列中拿出排在第一位的回调函数放到主线程当中的执行栈去执行,执行完毕后再去任务队列中去找,一直到执行完毕(也称事件循环,任务队列中还包括宏任务和微任务队列)CSS处理完之后生成CSSOM
6). 将DOM树和CSSOM结合到一起生成渲染树render Tree 递归的计算每个节点的精准位置,通知电脑的gpu开始绘制(这个过程之前会发生回流和重绘计算节点在页面中的位置,一定实现发生回流再经过重绘节点在页面中显示的像素大小)