前端进阶之---常用常用再常用的缓存

在前端面试过程中,缓存几乎是必问的问题之一了,记得我有一次面试的时候,面试官让我说一下缓存的知识,我很自然就说出了localStorage,sessionStorage,cookie三者之间的不同点以及各自的特性,当我还在感觉自我回答很良好的时候,面试官就说关于缓存你在回去看看吧,这个回答并不合格。于是乎我就查了关于缓存的一些知识,以下就是关于缓存的一点见解。

以上就是关于前端缓存比较全的一张指示图,接下来讲几点:

1.http缓存命中顺序

http缓存都是从第二次请求开始的。第一次请求资源时,服务器返回资源,并在respone header头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,命中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否命中协商缓存,命中则返回304,否则服务器会返回新的资源。

2.关于强缓存

强制缓存在缓存数据未失效的情况下(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,不会再向服务器发送任何请求。强制缓存生效时,http状态码为200。这种方式页面的加载速度是最快的,性能也是很好的,但是在这期间,如果服务器端的资源修改了,页面上是拿不到的,因为它不会再向服务器发请求了。这种情况就是我们在开发种经常遇到的,比如你修改了页面上的某个样式,在页面上刷新了但没有生效,因为走的是强缓存,所以Ctrl + F5一顿操作之后就好了。

3.协商缓存

当第一次请求时服务器返回的响应头中没有Cache-Control和Expires或者Cache-Control和Expires过期还或者它的属性设置为no-cache时(即不走强缓存),那么浏览器第二次请求时就会与服务器进行协商,与服务器端对比判断资源是否进行了修改更新。如果服务器端的资源没有修改,那么就会返回304状态码,告诉浏览器可以使用缓存中的数据,这样就减少了服务器的数据传输压力。如果数据有更新就会返回200状态码,服务器就会返回更新后的资源并且将缓存信息一起返回。

协商缓存的执行流程是这样的:当浏览器第一次向服务器发送请求时,会在响应头中返回协商缓存的头属性:ETag和Last-Modified,其中ETag返回的是一个hash值,Last-Modified返回的是GMT格式的最后修改时间。然后浏览器在第二次发送请求的时候,会在请求头中带上与ETag对应的If-Not-Match,其值就是响应头中返回的ETag的值,Last-Modified对应的If-Modified-Since。服务器在接收到这两个参数后会做比较,如果返回的是304状态码,则说明请求的资源没有修改,浏览器可以直接在缓存中取数据,否则,服务器会直接返回数据。

以上就是对http缓存的一些简单理解,至于再细一点的大家可以翻阅相关对于缓存的细讲,才疏学浅,就不在此献丑了。

最后 在此附上本文摘抄的原文地址

https://mp.weixin.qq.com/s/UWSinMVpJeusWABjWvB9mw

原文地址:https://www.cnblogs.com/Aaron1Tall/p/11041884.html

时间: 2024-11-05 19:14:25

前端进阶之---常用常用再常用的缓存的相关文章

js常用函数和常用技巧

学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数,代码如下: var Ajax = function(url, type success, error) { $.ajax({ url: url, type: type, dataType: 'json', timeout: 100

cmake 常用变量和常用环境变量查表手册

cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DIR 两个变量.显式定义的例子我们前面也提到了,使用 SET 指令,就可以

Dockerfile常用指令详解&镜像缓存特性

Dockerfile简介 Dockerfile 是Docker中用于定义镜像自动化构建流程的配置文件.在Dockerfile中,包含了构建镜像过程中需要执行的命令和其他操作.通过Dockerfile可以更加清晰,明确的给定Docker镜像的制作过程,由于仅是简单,小体积的文件,在网络等介质中传递的速度快,能够更快的实现容器迁移和集群部署.Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. 相对于提交容器修改在进行镜像迁

设置常用的过滤器-不适用缓存、登陆过滤器

设置不使用缓存的过滤器 功能描述 将HTTP响应头信息中的缓存参数设置为不进行缓存. 使用方法 在 java web 项目的 web.xml 文件中添加如下代码. <!--设置不使用缓存的过滤器配置 开始 --> <filter> <filter-name>ClearCacheFilter</filter-name> <filter-class>com.hmw.filter.ClearCacheFilter</filter-class>

总结下哪些我们常用或不常用的字符串处理方法

我们经常的用的字符串的处理方法,有哪些的?常用不常用的都有,有必要总结下 1, charAt:可返回指定位置的字符; <script type="text/javascript"> 返回值“e” var str="Hello world!" document.write(str.charAt(1)) </script> 2,charCodeAt:方法可返回指定位置的字符的 Unicode 编码.这个返回值是 0 - 65535 之间的整数. 

cmake 常用变量和常用环境变量

cmake 常用变量和常用环境变量 一.cmake 变量引用的方式 前面我们已经提到了,使用${ }进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${ }取值. 二.cmake 自定义变量的方式 主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义"<projectname>_BINARY_DIR "和"<projectname>_SOURCE_DIR "两个变量. 使用 SET

Bootstrap开发前端 进阶(优化及与后端结合接口)总结

Bootstrap开发前端 进阶(优化与接口分析)           chang_jw 通过使用bootstrap3.3.7,html5, CSS3进行购票系统网站前端开发. 实现index,film. Cinema, certain,login, success页面并可形成关联性跳转逻辑. 一,使用Google Fonts 插件进行字体优化 文字是网页中很重要的组成部分.为文字选择一个合适的字体,能够更好的展现一个网站的个性,表达所要传递的信息. 对于font理解首先是从CSS中,如: 浏览

Web前端学习第三天&#183;fighting_常用的一些标签(一)

标题标签<h1>~<h6> 块级标签,独占一行,一般常用的使<h3>和<h4>. 换段标签<p> 块级标签,其后面的内容会空一行再显示. style=“test-indent:2em” 可以设置样式为首行缩进两个字符. <blockquote></blockquote>可以用来设置整个段落的缩进 超链接<a> 行级标签. 重要属性有三个:href.target.name href  超链接地址:可以是Web上任

前端与php的sublime text3常用插件

1.安装Package Control 快捷键: ctrl+`     粘贴内容后Enter:  import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.re