当我们输入地址的时候,浏览器就开始在匹配可能的url,在书签、历史记录等地方查找,然后给出提示,让用户可以补全url地址。
当网址完全输入,按下回车键时,浏览器做的第一件事就是DNS解析。浏览器会先去本地的hosts文件中看看有没有和这个域名对应的ip,如果有就打开这个ip,没有的话浏览器会发送DNS请求到DNS服务器,这个过程先去本地的DNS服务器查找,有则返回,没有的话本地DNS服务器继续向根DNS服务器发送请求,然后将获取到的ip返回,并且本地的DNS服务器还将这个对应关系保存在缓存中,方便下次查询。这里的查询是迭代查询,查询的递交者是客户端。
拿到对应的ip后,浏览器与服务器通过三次握手建立TCP/IP连接后,发送http请求,进行网络通信,浏览器从应用层到传输层(TCP)、到网络层(IP)、到链路层(网络),客户端发送请求的阶段结束。
服务器接收到客户端发送的http请求后,查找客户端请求的资源,然后再从链路层到网络层、到传输层、到应用层,将响应报文返回,通过四次挥手断开TCP/IP连接。
浏览器收到html、css、js等文件后,解析html构建DOM树、构建render树、布局render树、绘制render树,然后解析css文件构建渲染树,这个过程完成后,浏览器开始布局渲染树并将其绘制到页面中。
在首次加载时会经历回流和重绘,速度较慢。js的加载可以看成是这个同步的主线程上的一个任务队列。有的网页页面很大,可以用预加载和懒加载提升用户体验。