代码运行机制
1 ip协议=>dns解析 (找到你要找的服务器),发送请求,三次握手 ,建立连接开始交互
2 页面渲染
3垃圾回收
(1).
UDP协议:
面向无连接,面向无对象,不需要正式传递数据之前就连接双方,udp 只负责数据包的搬运,不保证数据包的有序和丢失。
面向无对象:不需要三次握手.
应用场景:纪实微信视频通话–用tcp会有延迟,不合适。
#tcp协议(有拥塞控制,不会拥塞)
要建立连接传输,传输过程有各种算法,保证数据的可靠性,没有udp高效
三次握手:
1客户端向服务端发送连接请求,
2服务端向客户端发送请求应答
3客户端接受到应答后,向服务端发送确认报文(确认建立了连接)
为什么tcp建立连接为什么需要三次就可以,明明二次就可以?
客户端发送连接A,因为网络问题没有到达服务端,那么tcp会启动超时重传机制,从新发送一个连接请求b,当b顺利到达后,建立连接。当数据传输完以后断开连接,这是a才到达服务器,服务端以为客户端又想建立连接,于是服务端给予响应,但此时客户端已经关闭,服务端一直等待,造成资源浪费。
(2)页面渲染(代码自上而下执行,js引入文件放在最后加快渲染时间)
浏览器内核分为浏览器渲染引擎和js执行引擎
浏览器渲染引擎:
1 浏览器接收到html文件
词法分析 =>标记(0101010字符串一段一段的代码)=>node节点(thml标签)=>Dom树
2 浏览器接收到css文件
步骤同上=>CSSOM树
3渲染树
dom树+css树=render树
什么情况下会阻塞渲染?
1无意的的标签越多,cssom树生成更加费时间,render渲染开始时间更晚
2html css
等js执行完才能执行html
解决
async异步 页面执行完才运行。defer并行,跟html一起运行。
js执行引擎执行js代码:
js执行机制:
代码–>预编译(编译环境,创建执行上下文)–>执行
执行代码时内存:
1 当js执行全局代码,一定会编译全局代码并创建全局执行上下文,并且全局就只有一份
2当一个函数被调用,函数体内会被编译,创建函数执行上下文,函数执行结束以后,创建的函数执行上下文会被销毁
引用类型一般比较大,所以放在堆中。一是为了防止栈溢出,方便栈之间的联系切换,查找消耗小,效率高。虽然造成回收机制消耗更大,但是相对与栈的消耗,还是比较好的。
变量环境用来存放变量和函数,let和const放在词法作用域,用来区分;
v8垃圾回收机制-----新生区和老生区