作者回复: 赞的,回头补上05-06节所讲的渲染流程,整个过程就完整了
作者回复: 总结的很详细,用心了!
作者回复: 我看了下代码,因为连接里面使用了 rel="noopener noreferrer"这个属性。
这个涉及到安全了,要完整解释起来就话长了,我长话短说,先看阿里这个网站的连接是下面这种形式:
<a target="_blank" rel="noopener noreferrer" class="hover" href="https://linkmarket.aliyun.com/hardware_store?spm=a2c3t.11219538.iot-navBar.62.4b5a51e7u2sXtw" data-spm-anchor-id="a2c3t.11219538.iot-navBar.62">硬件商城</a>
使用noopener noreferrer就是告诉浏览器,新打开的子窗口不需要访问父窗口的任何内容,这是为了防止一些钓鱼网站窃取父窗口的信息。
浏览器在打开新页面时,解析到含有noopener noreferrer时,就知道他们不需要共享页面内容,所以这时候浏览器就会让新链接在一个新页面中打开了。
作者回复:
由于正文篇幅有限,无法对keep-alive做详细解释,刚好借着这个问题,我把keep-alive讲清楚。
首先keep-alive是为了解决连接效率不高的问题,http1.0时代,http请求都是短连接的形式,也即是每次请求一个资源都需要和服务器建立连接+传输数据+断开连接,通常,建立连接和断开连接的时间就有可能超过传输数据的时间了,这种短连接的效率是异常的低效。
针对短连接低效的问题,后面就出现了长连接,也就是这里要讲的keep-alive。
你可以把长连接看成是一个管道,一个http请求结束之后,不会关闭连接,下个请求可以复用该连接,这样就省去建立连接和断开连接的时间了,但是他们请求是按照顺序,也就是符合IP+端口规则的资源都可以复用该连接,这就回答了上面提的这个问题。
但是,使用keep-alive同样存在问题,比如一个页面可能有100张图片素材,假设这些图片素材都保存在同一个域名下面,如果只复用一个http管道的话,那么传输100张图片的素材也是非常耗时间的,这就出现了同一时刻并发连接服务器的需求,也就是文中提到同一时刻,对同一域名下面,只能可以发起6个请求,这样就可以大大提升请求效率了。
为什么是6个请求而不是更多了,这是为了服务器性能考虑,如果同一时刻无限制连接,那么可能会导致服务器忙不过来。
作者回复: 超级赞
作者回复: 你能想到这个问题,说明你已经快思考到最核心的---事件循环机制了,非常好。
多个页面公用一个渲染进程,也就意味着多个页面公用同一个主线程,所有页面的任务都是在同一个主线程上执行,这些任务包括渲染流程,JavaScript执行,用户交互的事件的响应等等,@@@但是@@@ 如果一个标签页里面执行一个死循环,那么意味着该JavaScript代码会一直霸占主线程,这样就导致了其它的页面无法使用该主线程,从而让所有页面都失去响应!
关于循环系统,我会在后续章节做详细分析!
作者回复: 补充的好 👍
作者回复:
多谢,看了你的提示,我重新看了一遍源码的执行过程,原文的确有两个地方描述不妥当,我现在评论区做下修订,稍后更正原文。
1:浏览器进程发出URL请求给网络进程
2:网络进程接收到URL请求之后,便发起网络请求,然后服务器返回HTTP数据到网络进程,网络进程解析HTTP出来响应头数据,并将其转发给浏览器进程
3:浏览器进程接收到网络进程的响应头数据之后,发送CommitNavigation消息到渲染进程,发送CommitNavigation时会携带响应头、等基本信息。
4:渲染进程接收到CommitNavigation消息之后,便开始准备接收HTML数据,接收数据的方式是直接和网络进程建立数据管道
5:最后渲染进程会像浏览器进程“确认提交”,这是告诉浏览器进程,说我已经准备好接受和解析页面数据了
6:最后浏览器进程更新页面状态
作者回复: 要左键直接点击才开的才算
作者回复: 页面进程关闭后,浏览器进程会接收到关闭的消息,然后浏览器进程会通知网络进程主动断开该页面的所有tcp连接。
所以你不用担心页面关闭会导致网络问题!
作者回复: 谢谢,这也让我很开心
作者回复: 赞
作者回复: 缓存描述可以加上,dns缓存和资源缓存,还可以结合05-06的文章把渲染流程补上来!
作者回复: 第一个就是接受到第一批inde.html的数据就会发送提交文档的消息
第二个要等所有资源加载完毕,js css image等
作者回复: 那说明百度依然支持http协议,浏览器里面可能你之前有过https的访问记录,所以浏览器在请求之前将你的协议切换称https了。
作者回复: 是的,提交温档后便开始解析DOM,解析CSS,生成布局树,然后绘制等操作,从解析HTML到绘制页面的第一个像素,是需要时间的!
优化好的页面这个时间会很短,优化差的页面这个空白时间会比较久!
作者回复: 文章中关于“提交文档”这块之前说法不算太准确,在2019/11/15修正文章中的“提交文档”的描述,所以最终以文章中的说法为准,关于评论区的问题,我晚点来修订!