从输入 URL 开始
前言
好久没写博客了,我原先的标题是 “从输入url到页面加载完成的XXX”?
但想着,这是别人嚼烂很多次的内容,缺乏挑战性,而且,页面操作过程中能优化的地方实在太多了。
那就干脆给自己挖个坑吧,好歹也在运维开发部待过一年的时间。
本文将尝试从前后端或运维多个角度,来述说整个站点从解析到操作过程中的优化。
1. 流程回顾
1. URL的输入到浏览器解析的一系列事件
很多大公司面试喜欢问这样一道面试题,输入URL到看见页面发生了什么?,今天我们来总结一下。 简单来说,共有以下几个过程
- 浏览器中输入网址
- 域名解析(
DNS
),找到IP服务器 - 发起
TCP
连接,HTTP
三次握手,发送请求(Request
) - 服务器响应HTTP(Response)
- 浏览器下载资源
html css js images
等 - 浏览器解析代码(如果服务器有
gzip
压缩,浏览器先解压) - 浏览器渲染呈现给用户
2. 结合操作页面到关闭标签页
我们在页面渲染完成之后执行某些操作:
- 按钮重复点击
- 滚动操作
- 条件查询检索
姑且将以上都归为 ==> 8. 界面操作
还在步骤3:发起TCP连接 前插入:
- 浏览器允许的并发请求优化
下面就让我们从DNS解析开始...
2. DNS解析流程
以Chrome
浏览器为例:
-
Chrome浏览器 会首先搜索浏览器自身的DNS缓存。
(缓存时间比较短,默认只有1分钟,且只能容纳1000条缓存)
注:chrome://net-internals/#dns
来进行查看Chrome
自身的缓存)
- 如果浏览器自身的缓存里面没有找到对应的条目,那么
Chrome
会搜索操作系统自身的DNS缓存
-
Windows
- 在Windows
中查看DNS
缓存条目的过程非常简单。只需打开命令提示符并输入以下命令:ipconfig /displaydns
。 -
Mac
- 在Mac
上查看DNS
缓存条目的过程略有不同。需要先打开控制台应用,从左侧边栏选择设备,然后输入:any:mdnsresponder
进入搜索栏。接下来,打开命令行并输入以下命令:sudo log config --mode "private_data:on"
sudo killall -INFO mDNSResponder