输入URL到浏览器完成页面渲染发生了什么


浏览器渲染大致的几个过程:

  • DNS域名解析
  • 建立TCP连接
  • 发送HTTP请求
  • 服务器处理请求
  • 返回响应结果
  • 关闭TCP连接
  • 浏览器解析HTM
  • 浏览器布局渲染

一、DNS域名解析 (通过DNS查询域名所对的IP地址)

  • 我们在浏览器输入网址的时候,浏览器从历史记录和书签等地方搜寻自己的DNS缓存,找出已输入的字符串可以对应的url,然后根据智能提示,让你可以通过enter键,补全url地址。
  • 查找本地hosts文件,检查该文件是否有相应的域名,ip对应关系,有的话取出
  • 若上两步都没有,将域名发送给本地DNS服务器(中国电信,移动),查询本地DNS缓存,查找成功则返回结果。若不成功则通过迭代查询,多次访问不同的DNS服务器,取到域名对应的ip地址返回给本地DNS服务器
  • 本地DNS将这个域名和IP地址缓存起来,然后把ip地址以响应报文的形式发送给客户端

二、建立TCP连接 (可靠稳定)

TCP 是一种面向有连接的传输层协议。 它可以保证两端(发送端和接收端)通信主机之间的通信可达。 它能够处理在传输过程中丢包、传输顺序乱掉等异常情况;此外它还能有效利用宽带,缓解网络拥堵。

三次握手:建立连接
上图也可以这么理解:
客户端:“你好,在家不,有你快递。”
服务端:“在的,送来就行。”
客户端:“好嘞。”

三、发送http请求

   HTTP请求报文(用什么协议,取什么资源)

四、服务器处理请求

   web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件(HTML,css,js),再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。


五、返回响应结果

返回响应报文,报文中都会有一个HTTP状态码

六、关闭TCP连接

四次挥手,避免服务器与客户端双方的资源占用和损耗


上图可以这么理解:
客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”
服务端:“收到,我看看我这边有木有数据了。”
服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”
客户端:“好嘞。”

七、浏览器解析HTML

渲染引擎使用webkit,采用关键路径渲染的方式

a.构建DOM树

解析html文件,遍历文档节点,生成Dom树。 DOM树的生成过程可能会被CSS和JS的加载阻塞

b.生成CSSOM规则树

解析CSS文件生成CSS规则树,每个css文件都被分析成一个stylesheet对象
c.渲染阻塞
当文档加载过程中遇到 js 文件,html 文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中 js 文件加载完毕,还要等待解析执行完毕,才可以恢复 html 文档的渲染线程。因为 JS 有可能会修改 DOM
d.构建渲染树
浏览器会从DOM树的根节点开始遍历,对每个可见节点找到其适配的CSS样式规则应用
渲染树是用于显示,那些不可见的元素当然就不会在这棵树中出现了,譬如。除此之外,display等于none的也不会被显示在这棵树里头,但是visibility等于hidden的元素是会显示在这棵树里头的。
e.渲染树布局
从渲染树的根节点开始遍历,计算每个可见节点的在页面上确切的位置和大小,这个阶段输出的是盒子模型
f.渲染树绘制
遍历渲染树,调用渲染器的paint()方法在屏幕上显示内容,渲染树的绘制工作由浏览器的UI后端框架完成
g.reflow和repaint (回流与重绘)
HTML默认是流式布局的,CSS和js会打破这种布局,改变DOM的外观样式以及大小和位置。这时就要提到两个重要概念:replaint和reflow。
replaint:屏幕的一部分重画,不影响整体布局,比如某个CSS的背景色变了,但元素的几何尺寸和位置不变。
reflow: 意味着元件的几何尺寸变了,我们需要重新验证并计算渲染树。是渲染树的一部分或全部发生了变化。


全部评论

相关推荐

不愿透露姓名的神秘牛友
05-29 22:21
Offer1:小马智行,深圳,测试开发工程师,17.0k*16.0,Offer2:追觅科技,深圳,嵌入式工程师,18.0k*15.0,
嵌软狗都不学:各位base深圳的同事,作为也是并肩作战的一员,今天想站在管理视角,和大家开诚布公地聊一聊:从近几个月的上下班数据对比看来,我们发现一个明显的差异:深圳同事的在岗时间普遍比苏州同事短。很多深圳同事早上9点之后才到公司,晚上不到 20 点就下班了;而总部那边,20点半甚至 22 点后还有不少同事在办公室忙碌,特别是研发团队,加班更是常态。相信去过苏州的同事,对这种场景都不陌生。我很好奇,这是因为苏州工作任务太重还是咱们深圳同事效率真的高到能在更短时间内完成工作?MOVA在深圳成立分公司是为了吸引更优秀的人才贡献更多更高质的价值,公司管理层给我反馈的是深圳招到的多是行业的专家大拿,大部分都是薪资比苏州高的,而且我们办公的租金等也远高于苏州的..MOVA虽脱胎于强壮的集团母体不久,各业务板块尚未实现全面盈利,虽说公司管理层目光长远,不纠结当下的人才投入,但行业内的普遍标准是,员工创造的价值要达到公司雇佣成本的 15 倍以上。大家不妨自我审视一下,自己是否达到了这个标准?如果是抱着划水、按时打卡走人拿毛爷爷的心态那不适合来MOVA,那样过下去不但自己过得尴尬也会影响MOVA这个大船的攻城略地的速度.我并非鼓励大家盲目加班,而是倡导高效工作,拒绝无效忙碌,不要让项目进度因低效受影响,也别把精力浪费在和苏州同事拼打卡时长上,提倡更高的人效比;考虑到两地地域和交通差异,相信大家会找最适合自己发挥的工作方式(比如按时下班后1小时到家晚饭后继续未竟工作等..)大家在遵守公司规章的情况下尽情地体现自己的能力价值,为MOV!和深圳公司争光我们在这边才能更安心更有信心的工作下去;请客BU长、名部门长、项目管理和各业务单元负责人,全面梳理团队情况,及时评估成员工作负荷与成果质量,坚决清退划水害虫痕疫,践行公司价值观,相互监督,防止管理漏洞及渎职。感谢人家的理解,也请人家多担待我的直言不讳……
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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