浏览器工作原理与实践
李兵
前盛大创新院高级研究员
立即订阅
6167 人已学习
课程目录
已完结 42 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 参透了浏览器的工作原理,你就能解决80%的前端难题
免费
宏观视角下的浏览器 (6讲)
01 | Chrome架构:仅仅打开了1个页面,为什么有4个进程?
02 | TCP协议:如何保证页面文件能被完整送达浏览器?
03 | HTTP请求流程:为什么很多站点第二次打开速度会很快?
04 | 导航流程:从输入URL到页面展示,这中间发生了什么?
05 | 渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?
06 | 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
浏览器中的JavaScript执行机制 (5讲)
07 | 变量提升:JavaScript代码是按顺序执行的吗?
08 | 调用栈:为什么JavaScript代码会出现栈溢出?
09 | 块级作用域:var缺陷以及为什么要引入let和const?
10 | 作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?
11 | this:从JavaScript执行上下文的视角讲清楚this
V8工作原理 (3讲)
12 | 栈空间和堆空间:数据是如何存储的?
13 | 垃圾回收:垃圾数据是如何自动回收的?
14 | 编译器和解释器:V8是如何执行一段JavaScript代码的?
浏览器中的页面循环系统 (6讲)
15 | 消息队列和事件循环:页面是怎么“活”起来的?
16 | WebAPI:setTimeout是如何实现的?
17 | WebAPI:XMLHttpRequest是怎么实现的?
18 | 宏任务和微任务:不是所有任务都是一个待遇
19 | Promise:使用Promise,告别回调函数
20 | async/await:使用同步的方式去写异步代码
浏览器中的页面 (8讲)
21 | Chrome开发者工具:利用网络面板做性能分析
22 | DOM树:JavaScript是如何影响DOM树构建的?
23 | 渲染流水线:CSS如何影响首次加载时的白屏时间?
24 | 分层和合成机制:为什么CSS动画比JavaScript高效?
25 | 页面性能:如何系统地优化页面?
26 | 虚拟DOM:虚拟DOM和实际的DOM有何不同?
27 | 渐进式网页应用(PWA):它究竟解决了Web应用的哪些问题?
28 | WebComponent:像搭积木一样构建Web应用
浏览器中的网络 (3讲)
29 | HTTP/1:HTTP性能优化
30|HTTP/2:如何提升网络速度?
31|HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络
浏览器安全 (5讲)
32 | 同源策略:为什么XMLHttpRequest不能跨域请求资源?
33 | 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
34 | CSRF攻击:陌生链接不要随便点
35 | 安全沙箱:页面和系统之间的隔离墙
36 | HTTPS:让数据传输更安全
结束语 (1讲)
结束语 | 大道至简
课外加餐 (4讲)
加餐一|浏览上下文组:如何计算Chrome中渲染进程的个数?
加餐二|任务调度:有了setTimeOut,为什么还要使用rAF?
加餐三|加载阶段性能:使用Audits来优化Web性能
加餐四|页面性能工具:如何使用Performance?
浏览器工作原理与实践
登录|注册

30|HTTP/2:如何提升网络速度?

李兵 2019-10-12
上一篇文章我们聊了 HTTP/1.1 的发展史,虽然 HTTP/1.1 已经做了大量的优化,但是依然存在很多性能瓶颈,依然不能满足我们日益变化的新需求,所以就有了我们今天要聊的 HTTP/2。
本文我们依然从需求的层面来谈,先分析 HTTP/1.1 存在哪些问题,然后再来分析 HTTP/2 是如何解决这些问题的。
我们知道 HTTP/1.1 为网络效率做了大量的优化,最核心的有如下三种方式:
增加了持久连接;
浏览器为每个域名最多同时维护 6 个 TCP 持久连接;
使用 CDN 的实现域名分片机制。
通过这些方式就大大提高了页面的下载速度,你可以通过下图来直观感受下:
HTTP/1.1 的资源下载方式
在该图中,引入了 CDN,并同时为每个域名维护 6 个连接,这样就大大减轻了整个资源的下载时间。这里我们可以简单计算下:如果使用单个 TCP 的持久连接,下载 100 个资源所花费的时间为 100 * n * RTT;若通过上面的技术,就可以把整个时间缩短为 100 * n * RTT/(6 * CDN 个数)。从这个计算结果来看,我们的页面加载速度变快了不少。

HTTP/1.1 的主要问题

虽然 HTTP/1.1 采取了很多优化资源加载速度的策略,也取得了一定的效果,但是 HTTP/1.1对带宽的利用率却并不理想,这也是 HTTP/1.1 的一个核心问题。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《浏览器工作原理与实践》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

  • 滇西之王
    在tcp层 Tls层以上的数据都是tcp层的数据,tcp层对每个数据包都有编号,分为1,2,3 .... tcp保证双向稳定可靠的传输,如果2包数据丢失,1号包和3号包来了,那么在超时重传时间还没有收到2编号数据包,服务端会发送2号数据包,客服端收到之后,发出确认,服务端才会继续发送其他数据,客服端数据才会呈现给上层应用层,这样tcp层的阻塞就发生了
    2019-10-12
    6
  • moss
    老师好,采用了HTTP/2之后,雪碧图是不是彻底不需要了呢?而且多张图片变成雪碧图后,多张图片大小加和都没有一张雪碧图大,那是不是雪碧图反而让传输更慢了呢?

    作者回复: http/2是没必要用雪碧图了

    2019-10-17
    1
    2
  • 小智
    浏览器是如何判断选择http1,http1.1,http2的。对应的部署是不是也要有回退机制,比如检测到浏览器不支持http2,就返回http1的模式?
    2019-10-24
    1
    1
  • 安思科
    前几天,http3已经在chrome和curl试用,使用UDP试图解决对头阻塞问题。
    2019-10-12
    1
  • 屈悦微
    这篇文章解决了我的很多疑问,但是文中有一点我还是不太理解,望作者百忙之中来解疑
    文中说http2中传输有优先级之分
    那么做为前端开发者能不能控制某个文件(如js)的优先级
    1.如果能,怎么控制?
    2.如果不能,优先级是由浏览器自动控制的么?
    2019-12-07
  • 玉皇大亮
    有个疑问想请教老师,既然HTTP1.1为了并行下载资源为每个域名提供了6个TCP连接,那这6个TCP连接是并行传输数据的么?如果是为什么还会有队头阻塞的问题呢?这里没搞明白,或者其他同学明白的帮忙回答一下呗,感谢感谢

    作者回复: 这六个TCP连接的请求过程是并行的,这里所提到的对头阻塞是指发生在每个单独的tcp连接中,因为一个tcp连接可以用来处理多个http请求。

    2019-12-05
    1
  • vianem
    带宽那有点问题吧?一般我们说的100M带宽,是指100Mbps,转换成MBps得除以8

    作者回复: 我除了啊

    2019-12-05
  • Rocky
    tcp的队头阻塞虽然是缺点,但也从另一个方面保证了数据传输的可靠性,前一个没有完成或者出错,可以重传。改用udp后可能会丢帧,不可靠

    作者回复: http3中的quic协议也提供了udp的可靠传输

    2019-11-29
  • splm
    关于1.1的不理解地方,1.1不足的是因为同时创建了多个连接,导致抢占资源,但不是说1.1是长连接,管线化的吗?前者延迟,后面的任务也会跟着延迟,是一个串行的策略,但这里的说法,感觉是个并行的策略的啊。希望老师能解答一下。
    2019-10-24
    1
  • 服务器推送最大的好处是消息推送在浏览器端高效实现有可能了吧
    2019-10-14
    1
  • 蓝配鸡
    思考题我的愚见:
    一个http请求会被TCP拆成多份传输,接收方需要重新拼接, 如果其中一份由于某些原因没到达, 那么TCP会等待那份数据包从而形成了阻塞。

    对HTTP2的影响:
    由于http2把一个http请求拆成了很多小份进行传输, 自然在TCP层拆分,组装排序的成本就低了,进而绕过了或者说降低了TCP队头阻塞这个问题。
    2019-10-12
    1
  • Chao
    由于多路复用,反而产生队头阻塞时, 影响比http1.1更为巨大。
    在目前TCP下解决这个问题还是很困难的
    2019-10-12
  • Peter Cheng
    TCP的队头阻塞,TCP传输过程中也是把一份数据分为多个数据包的。当其中一个数据包没有按照顺序返回,接收端会一直保持连接等待数据包返回,这时候就会阻塞后续请求。
    2019-10-12
  • 許敲敲
    老师你好,想问一下。HTTP2传输数据是一帧一帧的,然后再合并。那么这一帧一帧也会有顺序嘛? 客户端合并的话,是怎么合并的呢?会不会乱序?
    2019-10-12
    4
收起评论
14
返回
顶部