浏览器缓存
浏览器缓存分为强缓存和协商缓存,当客户端请求某个资源时,获取缓存的流程如下:
- 先根据这个资源的一些 http header 判断它是否命中强缓存,如果命中,则直接从本地获取缓存资源,不会发请求到服务器。
- 强缓存没有命中时,客户端会发送请求到服务器,服务器通过另一些 request header 验证这个资源是否命中协商缓存,称为 http 再验证,如果命中,服务器将请求返回,但不返回资源,而是告诉客户端直接从缓存中获取,客户端收到返回后就会从缓存中获取源。
- 强缓存和协商缓存共同之处在于,如果命中缓存,服务器都不会返回资源;
- 区别是,强缓存不对发送请求到服务器,但协商缓存会。 当协商缓存也没命中时,服务器就会将资源发送回客户端。
- 当 ctrl+f5 强制刷新网页时,直接从服务器加载,跳过强缓存和协商缓存。
- 当 f5 刷新网页时,跳过强缓存,但是会检查协商缓存。
说说从输入 URL 到看到页面发生的全过程
首先浏览器主进程接管,开了一个下载线程。
然后进行 HTTP 请求(DNS 查询、IP 寻址等等),中间会有三次握手,等待响应,开始下载响应报文。
将下载完的内容转交给 Renderer 进程管理。
Renderer 进程开始解析 CSS rule tree 和 DOM tree,这两个过程是并行的。
解析绘制过程中,当浏览器遇到 link 标签或者 script、img 等标签,浏览器会去下载这些内容,遇到缓存的使用缓存,不适用缓存的重新下载资源。
CSS rule tree 和 DOM tree生成完了之后,开始合成 render tree,这个时候浏览器会进行 layout,开始计算每一个节点的位置,然后进行绘制。
绘制结束后,关闭 TCP 连接,过程有四次挥手。
href和src的区别
href和src都是用来引用外部资源的属性。例如:网址、图片、视频、css文件、js文件等。
href(Hypertext Reference)超文本引用,用来建立当前元素和文档之间的连接。常用有link、a标签等。当它引用资源时,浏览器会将其识别为CSS文档,并行下载资源并且不会停止对当前文档的处理。
src(Source)会将指向的资源下载并引用到当前的文档中,常用标签有script、img、ifram等。它会替换掉当前的元素。当浏览器解析src时,会暂停其他资源的下载和处理,直接将该资源下载、编译、执行完毕。
href会建立一个关联指向资源,而src则是将资源嵌入当前文档中