为什么浏览器第一次页面加载慢,第二次加载则快很多?

浏览器在加载一个页面时候,有时候会等待1-2s,但是加载成功后,重新reload页面,则<1s可以加载出来,这个时候浏览器做了什么

阅读 4.7k
5 个回答

前面两位回答者已经给出了部分答案,浏览器第二次打开必然是使用了缓存。在"检查"模式下,可以network观察资源的加载情况。

从缓存获取的位置可以分为一下四种:

  1. service work
  2. memory cache
  3. disk cache
  4. push cache

如果命中,则返回status: 200。如果以上四种都未命中,则会发起网络请求,获取最新的资源。

图片1

同时去服务获取资源的时候,存在两种缓存策略,分别为

  1. 强制缓存
  2. 协商缓存

强制缓存:
主要看http header中的expires字段,会指定资源过期时间,在该时间之前,则不会去请求服务端数据。并且依赖于客户端,即客户端可以通过修改本地的时间跳过校验。

协商缓存
协商缓存
http/1.1 会更将last-modified的时间发送给服务端判断,当前的资源是否修改。
http/1.1 另一种协商缓存是使用Etag,将Etag发送给服务端,判断当前的资源是否修改,

如果为修改,则返回status:304 Not-Modified

图片描述

图片描述

第一次加载时,所有资源都需要从服务器加载一遍。
第二次加载时,因为浏览器有缓存,css,js等资源都直接从缓存中获取。
你可以打开控制台,观察network的内容

你需要去了解一下http缓存的知识
clipboard.png

浏览器有缓存机制

宣传栏