协议专题

从输入URL到页面加载的过程

2020-10-15  本文已影响0人  灯下草虫鸣314

前言

本文为阅读文章时的阅读笔记。为加深记忆,方便日后查找
原文地址: 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

正文

一、从浏览器接收url到开启网络请求线程

1、浏览器多进程的

浏览的进程主要包括:

2、浏览器的内核进程是多线程的

内核进程包括以下几个线程:

3、浏览器解析URL

URL主要包括:

了解浏览器的线程进程后,进入到本文主题:
第一步:浏览器线程解析URL取到主机域名

4、DNS解析

如果用户输入的是域名。就需要将域名解析为IP
如果浏览器有缓存,直接使用缓存,否则使用本机缓存,再没有就是用host,如果还没有就需要想dns服务器查询对应的IP
dns解析很耗时,如果解析域名过多的话,可以dns-prefetch优化
第二步:DNS解析IP

5、tcp\ip请求

三次握手、四次挥手
图例
get和post的区别:

两者本质上都是tcp/ip,get请求只会产生一个tcp数据包,post请求会产生两个。

五层网络协议
五层网络协议
  1. 应用层(dns,http) DNS解析成IP并发送http请求
  2. 传输层(tcp,udp) 建立tcp连接(三次握手)
  3. 网络层(IP,ARP) IP寻址
  4. 数据链路层(PPP) 封装成帧
  5. 物理层(利用物理介质传输比特流) 物理传输(然后传输的时候通过双绞线,电磁波等各种介质)
http1.0、http1,1、http2.0和https的区别

首先看长连接和短连接
在tcp/ip层面:

http层面

  1. http1.0:默认使用短连接。每完成一次请求就会断开连接
  2. http1.1:默认使用长连接。Connection: keep-alive,在一个http请求中可以发送多个数据包,当用户建立一个http请求后tcp连接不会断开,下次再次请求相同的资源依然会使用已经建立的tcp连接。但是没请求一个新的资源都会有一个新的tcp/ip连接。但是由于tcp/ip有并发限制。所以当同时请求数量过多时,速度就会下降。
  3. http2.0:默认使用长连接。而且一个tcp/ip连接可以请求若干资源,分隔成为更小的帧,速度得到提升。
    具体特性:
    • 多路复用(即一个tcp/ip连接可以请求多个资源)
    • 首部压缩(http头部压缩,减少体积)
    • 二进制分帧(在应用层跟传送层之间增加了一个二进制分帧层,改进传输性能,实现低延迟和高吞吐量)
    • 服务器端推送(服务端可以对客户端的一个请求发出多个响应,可以主动通知客户端)
    • 请求优先级(如果流被赋予了优先级,它就会基于这个优先级来处理,由服务器决定需要多少资源来处理该请求。)
  4. https
    与http的区别:在请求前,会建立ssl链接,确保接下来的通信都是加密的,无法被轻易截取分析
http缓存问题

协商缓存和强缓存
这里单独写一篇文章
http缓存机制-简书
http缓存机制-掘金

二、浏览器拿到服务器返回的HTML渲染

主要流程

浏览器内核拿到HTML后渲染主要有以下步骤:

  1. 解析HTML,生成DOM树
  2. 解析CSS,生成CSS树
  3. 将DOM树和CSS树合并为Render树
  4. 布局Render树,布局、重排,计算个元素的尺寸位置
  5. 绘制render树,重绘。
  6. 将各个图层信息发送给GPU,让GPU合成各图层,显示在屏幕上。
如图

重绘和重排

重排:当元素的内容、结构、尺寸、位置发生变化时需要重新计算样式和渲染树。
重排:元素只发生了一些只影响元素外观的属性时。如背景色,文字颜色。
重排的成本开销远大于重绘,所以我们应该尽量避免重排。
会引发重排的操作:

BFC模型

又名块格式化上下文

BFC有以下几个特点:

触发BFC的方法

三、js执行

js执行上下文VO、AO、作用域链、this

我不会啊我不会

js的垃圾回收

标记清除法

上一篇下一篇

猜你喜欢

热点阅读