当前位置: 首页 > Web前端 > HTML5

进度(线)进程、微(宏)任务与http通信(串口理解)

时间:2023-04-05 22:25:13 HTML5

为了学习Promise,我深陷浏览器http进程、进程、线程、宏任务、微任务、页面的漩涡渲染。自己提取,于是查了很多资料,根据自己的理解整理了他们的关系,希望能帮助纠正流程。1.Browserprocess进程:一个浏览器页面就是一个新的进程,进程是cpu资源分配的最小单位(系统会为它分配内存);Browser进程(http通讯)第三方插件进程GPU进程(加速,3D渲染,一次)Renderer进程(新页面渲染进程)1.1Browser进程(HTTP请求进程)1.1HTTP请求进程域名解析发起TCP三-握手方式常见的web服务器产品有apache、nginx、IIS、Lighttpd等,浏览器获取到域名对应的IP地址后,会使用随机端口(1024<端口<65535)向服务器的Web服务器发起TCP端口80连接请求。CP/IP协议栈也可能被防火墙过滤,最终到达WEB程序,最终建立TCP/IP连接。三向握手:client——发送带SYN标志的数据包——一次握手——serverserver——发送带SYN/ACK标志的数据包——第二次握手——clientclient——发送带ACK标志的数据包——三向握手——服务器在建立TCP连接后发起http请求。服务器响应http请求,浏览器得到HTML代码。浏览器处理HTML代码。渲染的主要过程。浏览器呈现页面并将其呈现给用户。HTTP和HTTPS的区别:HTTP的URL以[http://]()开头,HTTPS的URL以[https://]()开头。HTTP不安全,但HTTPS是安全的。HTTP的标准端口是80,HTTPS的标准端口是443。在OSI网络模型中,HTTP工作在应用层,而HTTPS的安全传输机制工作在传输层。HTTP无法加密,而HTTPS对传输的数据进行加密。HTTP不需要证书,而HTTPS需要CA机构颁发的证书wosignSSL证书1.4Renderer进程(浏览器渲染进程)线程:线程包含在每个进程中,线程是cpu调度的最小单位(线程是一个程序运行单元以进程为单位,可以有多个线程);GUI渲染线程JavaScript引擎线程定时触发线程(宏任务(asynchronoustask))事件触发线程(宏任务(asynchronoustask))异步http请求线程(宏任务(asynchronoustask))1.4.1GUI渲染线程解析HTML生成DOMtree——渲染引擎首先解析HTML文档,生成DOM树并构建Render树——接下来,无论是inline、outline还是embedded,都会解析引入的CSS样式,生成CSSOM树,根据DOM树和CSSOM树生成另一棵用于渲染的树——渲染树(Rendertree),布局渲染树——然后对渲染树的每个节点进行布局处理,确定其在屏幕上的显示位置并绘制渲染树——最后遍历渲染树并使用UI后端层绘制每个节点。GUI渲染线程和JS引擎线程是互斥的。由于JavaScript可以操作DOM,如果在渲染界面的同时修改这些元素的属性(即JS线程和UI线程同时运行),那么渲染线程前后获取的元素数据可能是不一致。所以,为了防止渲染结果不可预知,浏览器将GUI渲染线程和JS引擎设置为互斥。当JS引擎执行时,GUI线程会被挂起,GUI更新会保存在一个队列中,直到JS引擎线程空闲时立即执行。1.4.2JavaScript引擎线程(主线程执行栈)只有JS引擎线程一直在执行JS脚本程序,也称为JS内核,负责解析执行Javascript脚本程序。主线程执行栈)执行js脚本1.4.2js引擎执行顺序宏任务(同步任务)直接执行,其他线程先进入任务队列等待执行,然后执行任务队列中的微任务(只有异步任务)然后执行宏任务(异步任务)(如果任务中有宏任务(同步任务),则相应继续执行1)1.4.2宏任务和微任务宏任务定时触发线程(宏任务(异步任务))setTimeoutsetIntervalsetImmediaterequestAnimationFrame事件触发线程(宏任务(异步任务))异步http请求线程(宏任务(异步任务))脚本方法(宏任务(同步任务))newPromise(宏任务(同步任务))lijizhixing微任务(异步)task)由于Es6和node生成的微任务Promise.then()catch()finally(),一旦promise有结果,回调生成微任务process.nextTickMutationObserver参考浏览器渲染原理分析完成http流程从浏览器多进程到JS单线程,最全面的JS运行机制梳理[](https://juejin.im/post/5a6547...JavaScipt中的事件循环,以及microtask和macrotask的概念https://juejin.im/post/5b73d7a6518825610072b42b#heading-3js引擎的执行过程(二)