前端学习之浏览器从输入URL到页面加载的全过程

这篇具有很好参考价值的文章主要介绍了前端学习之浏览器从输入URL到页面加载的全过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

浏览器从输入URL到页面加载的全过程

从输入URL到页面加载的主干流程如下:

1、浏览器的地址栏输入URL并按下回车。

2、浏览器查找当前URL的DNS缓存记录。

3、DNS解析URL对应的IP。

4、根据IP建立TCP连接(三次握手)。

5、HTTP发起请求。

6、服务器处理请求,浏览器接收HTTP响应。

7、渲染页面,构建DOM树。

8、关闭TCP连接(四次挥手)。

1.首先在浏览器中输入URL

  • 我们常见的RUL是这样的:http://www.baidu.com,这个域名由三部分组成:协议名、域名、端口号,这里端口是默认所以隐藏。除此之外URL还会包含一些路径、查询和其他片段,例如:http://www.tuicool.com/search?kw=%E4%。我们最常见的的协议是HTTP协议,除此之外还有加密的HTTPS协议、FTP协议、FILe协议等等。URL的中间部分为域名或者是IP,之后就是端口号了。通常端口号不常见是因为大部分的都是使用默认端口,如HTTP默认端口80,HTTPS默认端口443。

  • 查找缓存:浏览器先查看浏览器缓存-系统缓存-路由缓存中是否有该地址页面,如果有则显示页面内容。如果没有则进行下一步。

  • 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;

  • 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统, 获取操作系统的记录(保存最近的DNS查询缓存);

  • 路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;

  • ISP缓存:若上述均失败,继续向ISP搜索。

2.DNS域名解析

我们知道在地址栏输入的域名并不是最后资源所在的真实位置,域名只是与IP地址的一个映射。网络服务器的IP地址那么多,我们不可能去记一串串的数字,因此域名就产生了,域名解析的过程实际是将域名还原为IP地址的过程。

首先浏览器先检查本地hosts文件是否有这个网址映射关系,如果有就调用这个IP地址映射,完成域名解析。

如果没找到则会查找本地DNS解析器缓存,如果查找到则返回。

如果还是没有找到则会查找本地DNS服务器,如果查找到则返回。

最后迭代查询,按根域服务器 ->顶级域,.cn->第二层域,hb.cn ->子域,www.hb.cn的顺序找到IP地址。

  • DNS域名解析:浏览器向DNS服务器发起请求,解析该URL中的域名对应的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议。

3.建立TCP连接: 解析出IP地址后,根据IP地址和默认80端口,和服务器建立TCP连接

发起HTTP请求: 浏览器发起读取文件的HTTP请求,,该请求报文作为TCP三次握手的第三次数据发送给服务器

服务器响应请求并返回结果:服务器对浏览器请求做出响应,并把对应的html文件发送给浏览器

关闭TCP连接 : 通过四次挥手释放TCP连接

浏览器渲染:客户端(浏览器)解析HTML内容并渲染出来,浏览器接收到数据包后的解析

**构建DOM树:**词法分析然后解析成DOM树(dom tree),是由dom元素及属性节点组成,树的根是document对象

  • 构建CSS规则树:生成CSS规则树(CSS Rule Tree)
  • 构建render树:Web浏览器将DOM和CSSOM结合,并构建出渲染树(render tree)
  • 布局(Layout):计算出每个节点在屏幕中的位置
  • 绘制(Painting):即遍历render树,并使用UI后端层绘制每个节点。

JS引擎解析过程:
调用JS引擎执行JS代码(JS的解释阶段,预处理阶段,执行阶段生成执行上下文,VO,作用域链、回收机制等等)

  • 创建window对象:window对象也叫全局执行环境,当页面产生时就被创建,所有的全局变量和函数都属于window的属性和方法,而DOM Tree也会映射在window的doucment对象上。当关闭网页或者关闭浏览器时,全局执行环境会被销毁。
  • 加载文件:完成js引擎分析它的语法与词法是否合法,如果合法进入预编译
  • 预编译:在预编译的过程中,浏览器会寻找全局变量声明,把它作为window的属性加入到window对象中,并给变量赋值为’undefined’;寻找全局函数声明,把它作为window的方法加入到window对象中,并将函数体赋值给他(匿名函数是不参与预编译的,因为它是变量)。而变量提升作为不合理的地方在ES6中已经解决了,函数提升还存在。
  • 解释执行:执行到变量就赋值,如果变量没有被定义,也就没有被预编译直接赋值,在ES5非严格模式下这个变量会成为window的一个属性,也就是成为全局变量。string、int这样的值就是直接把值放在变量的存储空间里,object对象就是把指针指向变量的存储空间。函数执行,就将函数的环境推入一个环境的栈中,执行完成后再弹出,控制权交还给之前的环境。JS作用域其实就是这样的执行流机制实现的。

浏览器重绘与重排的区别?

  • 重排/回流(Reflow):当DOM的变化影响了元素的几何信息,浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。表现为重新生成布局,重新排列元素。
  • 重绘(Repaint): 当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。表现为某些元素的外观被改变
  • 单单改变元素的外观,肯定不会引起网页重新生成布局,但当浏览器完成重排之后,将会重新绘制受到此次重排影响的部分
  • 重排和重绘代价是高昂的,它们会破坏用户体验,并且让UI展示非常迟缓,而相比之下重排的性能影响更大,在两者无法避免的情况下,一般我们宁可选择代价更小的重绘。
  • 『重绘』不一定会出现『重排』,『重排』必然会出现『重绘』。

如何触发重排和重绘?

任何改变用来构建渲染树的信息都会导致一次重排或重绘:

  • 添加、删除、更新DOM节点
  • 通过display: none隐藏一个DOM节点-触发重排和重绘
  • 通过visibility: hidden隐藏一个DOM节点-只触发重绘,因为没有几何变化
  • 移动或者给页面中的DOM节点添加动画
  • 添加一个样式表,调整样式属性
  • 用户行为,例如调整窗口大小,改变字号,或者滚动。

如何避免重绘或者重排?

  • 集中改变样式,不要一条一条地修改 DOM 的样式。

  • 不要把 DOM 结点的属性值放在循环里当成循环里的变量。

  • 为动画的 HTML 元件使用 fixed 或 absoult 的 position,那么修改他们的 CSS 是不会 reflow 的。

  • 不使用 table 布局。因为可能很小的一个小改动会造成整个 table 的重新布局。

  • 尽量只修改position:absolute或fixed元素,对其他元素影响不大

  • 动画开始GPU加速,translate使用3D变化

  • 提升为合成层

将元素提升为合成层有以下优点:文章来源地址https://www.toymoban.com/news/detail-422485.html

  • 合成层的位图,会交由 GPU 合成,比 CPU 处理要快
  • 当需要 repaint 时,只需要 repaint 本身,不会影响到其他的层
  • 对于 transform 和 opacity 效果,不会触发 layout 和 paint
    提升合成层的最好方式是使用 CSS 的 will-change 属性:
    #target {
    will-change: transform;
    }

到了这里,关于前端学习之浏览器从输入URL到页面加载的全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android项目在 app 中通过 WebView 访问 url显示空白,使用浏览器可以打开,Android WebView加载出现空白页面问题解决

    服务器证书校验主要针对 WebView 的安全问题。 在 app 中需要通过 WebView 访问 url,因为服务器采用的自签名证书,而不是 ca 认证,使用 WebView 加载 url 的时候会显示为空白,出现无法加载网页的情况。 使用 ca 认证的证书,在 WebView 则可以直接显示出来,不需要特殊处理。 以往

    2024年02月04日
    浏览(51)
  • 在浏览器输入URL后发生了什么?

    在浏览器输入URL并获取响应的过程,其实就是浏览器和该url对应的服务器的网络通信过程。 从封装的角度来讲,浏览器和web服务器执行以下动作:(简单流程) 1、浏览器先分析超链接中的URL:分析域名是否规范 2、浏览器向DNS请求解析请求解析http://www.sxtyu.com/index.html中的ip地

    2024年02月09日
    浏览(47)
  • 浏览器输入一个URL之后发生了什么?

    URL解析 DNS解析 TCP连接 TSL连接 HTTP请求 TCP挥手 接收并解析响应 主要分为: 协议,eg http,https 域名或者ip地址,eg www.baidu.com 域名相对于ip地址来说,更方便人们记忆,但是实际的网络传输中使用的是ip地址 端口号,不同的协议对应不同的端口号,一般可以不写,eg http是80,h

    2024年02月11日
    浏览(69)
  • 浏览器地址栏输入url以后发生了什么

    1.DNS对域名进行解析; 2.建立TCP连接(三次握手); 3.发送HTTP请求; 4.服务器处理请求; 5.返回响应结果; 6.关闭TCP连接(四次挥手); 7.浏览器解析HTML; 8.浏览器布局渲染; 1.浏览器对输入的地址补全,然后DNS域名解析  如果你搜索的是baidu.com的时候,实际访问的还是h

    2024年02月13日
    浏览(50)
  • 谷歌浏览器输入url地址后http自动转https问题解决方法

    谷歌浏览器输入“http + 域名”后自动变成 “https + 域名” 格式原因 安装配置了 SSL证书后,浏览器开启了 HSTS(HTTP Strict Transport Security)功能,它会告诉浏览器只能通过 https 访问,绝对禁止 http 方式,所以浏览器中输入http 后自动转成了 https 解决方法: 1、进入“chrome://net

    2024年02月11日
    浏览(57)
  • 程序部署到tomcat之后,在浏览器上输入URL报错404,该如何定位?

    目录 1.首先检查url是否正确 2.检查war包,查看部署之后的目录结构 3.查看tomcat日志 4.通过postman发请求 spring项目打包成war包再部署到tomcat上时,项目的路径要加上war包的名称,通过更改war包的名称,就可以更改访问路径。 格式为:协议://ip:端口号/war包名称/请求路径       

    2024年01月18日
    浏览(44)
  • 解决Selenium WebDriver 加载页面时出现浏览器闪退

      如果不匹配的话,可以去以下网址下载https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/  如果还是不能解决selenium闪退,可以通过以下几行代码来解决此问题。

    2024年02月15日
    浏览(85)
  • 从浏览器输入地址到页面渲染都经历了哪些过程

    这是一道比较综合的面试题,答案也不是固定的,从浏览器输入地址到页面渲染经过了很多的过程,且每个过程都可以深挖出很多知识点,面试官可以用这一道题区分出不同面试者的水平。下面我们就来具体学习下本道面试题。 构建请求 1.查找强缓存 浏览器会先检查是否存

    2023年04月09日
    浏览(49)
  • 在浏览器的舞台上演:前端如何挑战页面刷新的极限

    在无尽的数字海洋中,用户和浏览器之间建立了一座看不见的桥梁,连接了网页的现实与虚拟。而在这座桥上,JavaScript像是一位魔法师,可以通过各种巧妙的技巧,让页面焕然一新,展示出绚丽的景象。 这个博客将带你走进前端的奇妙世界,揭示页面刷新的幕后秘密。从简

    2024年02月04日
    浏览(42)
  • 前端:html实现页面切换、顶部标签栏,类似于浏览器的顶部标签栏(完整版)

    效果 代码 解决BUG:关闭单页时,单页数据未清空,导致再次打开单页时出现内容仍然存在的问题

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包