曾经有面试题是这样的:"描述在浏览器的地址栏中输入:http://www.baidu.com 后发生了什么?"。css
一、服务端返回baidu页面资源,浏览器载入htmlhtml
二、浏览器开始解析面试
三、发现link,发送请求载入css文件浏览器
四、浏览器渲染页面缓存
五、发现图片,发送请求载入图片,并从新渲染服务器
六、发送请求js文件,阻塞渲染。若是js对dom进行了操做,则会进行rerenderdom
对于支持离线存储的页面,浏览器和服务器的交互又是如何呢?spa
首次载入页面:htm
1-6 : 同上图片
7:请求页面中须要缓存的页面和数据,就算在以前的步骤中已经请求过(这是个耗能的地方)
8:服务器返回全部请求文件,浏览器进行本地存储
再次载入页面:
1:发送请求
2:使用本地存储的离线文件
3:解析页面
4:请求服务端的manifest文件,判断是否有改变,返回304则表示没有改变进入步骤5,不然进入步骤6
5:进入首次载入页面的7-8
6:使用本地存储,不从新请求