博客
关于我
web前端面试一从输入url到看到页面发生了什么
阅读量:287 次
发布时间:2019-03-03

本文共 2299 字,大约阅读时间需要 7 分钟。

从输入url到看到页面发生了什么

1.DNS解析

2.发送tcp连接

3.发送http请求

4.服务器处理请求并返回http报文

5.浏览器解析渲染界面

6.连接结束

DNS解析

1.解析过程 

DNS解析是一个递归的过程。比如,你输入www.google.com网址后,首先在本地的域名服务器中查找,没找到就去根域名服务器查找,再没有去com顶级域名服务器查找,如此类推,知道找到ip地址,把它记录在本地(.=>.com=>google.com=>www.google.com)

2.DNS优化

DNS缓存:因为DNS的解析存在N个过程,每个过程都会影响性能。使用DNS缓存可以提高性能。DNS存在多级缓存,从离浏览器的距离排序,依次为:浏览器缓存,系统缓存,路由器缓存等等。

DNS负载均衡:DNS负载均衡技术的实现原理是在DNS服务器中为同一个主机名配置多个IP地址,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。

发送TCP连接

 

发送HTTP请求 

1.GET和POST的区别

a.get用于请求,post用于提交

b.get只能发送普通格式的数据(URL编码格式),post发送的格式多种多样(纯文本,二进制)

c.get传输量小(受URL长度限制),post传输量大

d.get不安全(url是可见的,浏览器会缓存),post更安全(浏览器不会缓存post提交的数据)

2.http缓存(强缓存和协商缓存)

⑤HTTP的缓存机制

缓存的重要性不言而喻,通过网络请求资源缓慢并且降低了客户端的用户体验,增添了服务端的负担。很多短期之内不会经常发生变化的资源文件没必要每次访问都想服务端进行数据请求,而缓存策略的使用就是为了改善客户端的呈现时间,降低服务端的负担。

对于HTTP的缓存机制来说,策略体现在HTTP的头部信息的字段上,而这些策略根据是否需要重新向服务器端发起请求可以分为强缓存和协商缓存两大类。

强缓存相关的HTTP header 的字段

  • Expires(expires 字段规定了缓存的资源的过期时间
  • Cache-Control(缓存方式)

 

 协商缓存相关的HTTP header 的字段

  • Last-Modified 和 If-Modified-Since(让服务器去判断是否在此时间之后资源内容发生了变化)
  • Etag 和 If-None-Match(判断资源是否改变)

4.服务器处理请求并返回http报文

304 : 资源未改变

412:服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。

5.浏览器解析并渲染界面

 

  • 解析HTML形成DOM树
  • 解析CSS形成CSSOM 树
  • 合并DOM树和CSSOM树形成渲染树
  • 浏览器开始渲染并绘制页面 这个过程涉及两个比较重要的概念回流和重绘,DOM结点都是以盒模型形式存在,需要浏览器去计算位置和宽度等,这个过程就是回流。等到页面的宽高,大小,颜色等属性确定下来后,浏览器开始绘制内容,这个过程叫做重绘。浏览器刚打开页面一定要经过这两个过程的,但是这个过程非常非常非常消耗性能,所以我们应该尽量减少页面的回流和重绘

回流

DOM结点都是以盒模型形式存在,需要浏览器去计算位置和宽度等,这个过程就是回流。 

导致回流的操作

  • 页面首次渲染
  • 浏览器窗口大小发生变化
  • 元素尺寸或位置发生改变
  • 元素内容变化(文字数量,大小或图片大小)
  • 添加或者删除可见的DOM元素
  • 激活css伪类(eg:hover)
  • 查询某些属性或者调用某些方法(以下方法)

一些常用且会导致回流的属性和方法:

  • clientWidth、clientHeight、clientTop、clientLeft
  • offsetWidth、offsetHeight、offsetTop、offsetLeft
  • scrollWidth、scrollHeight、scrollTop、scrollLeft
  • scrollIntoView()、scrollIntoViewIfNeeded()
  • getComputedStyle()
  • getBoundingClientRect()
  • scrollTo()

重绘

当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。

如何针对重绘进行优化

css

  • 避免使用table布局
  • 尽可能在DOM树的最末端改变class
  • 避免设置多层内联样式
  • 将动画效果应用到position属性为absolute或fixed的元素上。
  • 避免使用CSS表达式(例如:calc())。

javascript

  • 避免频繁操作样式,最好一次性重写style属性,或者将样式列表定义为class并一次性更改class属性。
  • 避免频繁操作DOM,创建一个documentFragment,在它上面应用所有DOM操作,最后再把它添加到文档中。
  • 也可以先为元素设置display: none,操作结束后再把它显示出来。因为在display属性为none的元素上进行的DOM操作不会引发回流和重绘。
  • 避免频繁读取会引发回流/重绘的属性,如果确实需要多次使用,就用一个变量缓存起来。
  • 对具有复杂动画的元素使用绝对定位,使它脱离文档流,否则会引起父元素及后续元素频繁回流。

转载地址:http://exvm.baihongyu.com/

你可能感兴趣的文章
【浅谈】main函数的三个参数
查看>>
linux中()、[]、{}、(())、[[]]等各种括号的使用
查看>>
函数指针
查看>>
C++ initializer_list 类型详解
查看>>
C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解
查看>>
找不到 快速启动 ,怎么办
查看>>
Ubuntu安装软件以及查看已安装软件的几种方式
查看>>
关于fdisk -l看到的heads
查看>>
ubuntu18.04利用fdisk找到磁盘空闲区,新建分区,挂载
查看>>
C++ vector容器删除操作
查看>>
花书读书笔记(十八)-近似推断
查看>>
花书读书笔记(十九)-深度生成模型
查看>>
《百面机器学习》读书笔记(一)-特征工程
查看>>
《凸优化》中科大-讲解 -系列笔记(汇总55/55)
查看>>
STL教程:C++ STL快速入门(非常详细)
查看>>
MySQL中索引与视图的用法与区别详解
查看>>
【论文泛读03】卷积LSTM网络:一种短时降雨量预测的机器学习方法
查看>>
中科大-凸优化 笔记(lec45)-强凸性等价不等式
查看>>
linux 中 alien命令的使用
查看>>
【论文泛读29】关系抽取:卷积神经网络的视角
查看>>