浏览器渲染原理

一、获取IP地址:(DNS预解析)
1)查找浏览器缓存,没有则下一步
2)查找系统缓存,查找本机的host文件,没有则下一步
3)查找路由DNS缓存,查找ISP服务商缓存,没有则下一步
4)递归查询,ISP的DNS服务器进行递归查询,没有则本地域名服务器以DNS客户的身份向其他根域名服务器发送查询请求。
5)迭代查询,本地域名服务器采用迭代查询,向根域名服务器查询,有则返回,没有则告诉本地服务器下一步查询域名服务器地址(顶级域名服务器、权限域名服务器)

二、TCP/IP链接:

1)三次握手建立连接:(Seq:Sequence number(顺序号码)、Ack:Acknowledge(确认号码))
1、客户机向服务器发送一个建立连接的请求,并发送syn=1、随机产生seq的数据包到服务器,进入SYN_SEND状态,待服务器响应。
2、服务器接到要确认连接的信号,向客户机发送syn=1,ack=1,ack number=接受的seq数据包+1,随机产生seq的数据包到客户机。
3、客户机接到同意连接的信号,验证ack number是否正确、ack是否1,验证正确则客户机再次发送ack number=服务器seq+1,ack=1,服务器收到确认后则连接成功。

三、浏览器向web服务器发送请求:
1)浏览器根据IP地址和端口号发发起请求。
2)服务器接到请求之后,根据HTTP请求内容决定如何获取HTML文件。
3)服务器将得到的HTML文件发送给浏览器

get请求会产生一个tcp数据包、post请求会产生两个数据包:原因如下:
get请求:浏览器会把headers和data一起发送出去,服务器响应200(返回数据)
post请求:浏览器会把headers先发送出去,服务器响应100,则浏览器再次发送data,服务器响应200(返回数据)

四、浏览器渲染:
1、处理HTML生成DOM树,每个tag节点都是dom树的一个节点,包括js动态创建的节点
2、处理CSS生成CSSDOM树,处理过程会去掉浏览器不能识别的样式
3、两个树合并生成render树,每个节点都有自己的style,不包含隐藏节点,如display:none,而visibility:hidden隐藏的元素会包含,会占有空间
4、对render树进行布局计算,输出结果为盒模型,精确表达每个元素的位置和大小,相对度量单位转换成屏幕上绝对像素位置
5、将render树中每一个节点绘制到屏幕上,称为“绘制”、“栅格化”

五、四次挥手:
1、浏览器向服务器发送断开连接信号。
2、服务器收到请求,服务器说,等一下我还有数据没有发送完成
3、服务器说,我的数据发送完毕,可以断开连接了
4、浏览器:好的,你断开连接吧。

全部评论

相关推荐

12-04 16:18
已编辑
东华理工大学 前端工程师
面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗  他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了  好好准备,等待明天的影石360和周四的腾讯了  加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务