作为前端开发,缓存是整天接触的概念,面试必问、工作中也频繁接触到,可能大家对缓存的 header 记的比较熟了,可是大家有没有思考过为什么 HTTP 的缓存控制要这么设计呢?
缓存就是数据交换的缓冲区(称作Cache),这个概念最初是来自于内存和CPU。当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行
Web 缓存大致可以分为:数据库缓存、服务器端缓存(代理服务器缓存、CDN 缓存)、浏览器缓存。
HTTP 缓存不是必须的,但重用缓存的资源通常是必要的。它可以减少服务器的压力,如果不使用缓存,每次发起请求都要求服务器发送相应数据,很多时候服务器发来的内容并没有发生变化,就会“浪费”服务器带宽。可以在客户端设置缓存,给缓存加上过期时间,如果期限没到就是用本地缓存的内容。然而常见的 HTTP 缓存只能存储 GET 响应,对于其他类型的响应则无能为力。
HTTP缓存是一项重要且常见的web性能优化手段。当通过浏览器发送HTTP请求时,如果浏览器本地有所要请求的文档副本,那么浏览器可以直接从本地存储中读取该文档,而不用到服务器上下载该文档。使用HTTP缓存具有如下几点好处: 减少冗余的数据传输 缓解网络瓶颈 减缓服务器压力 降低请求时延 既然HTTP缓存有诸多好处,那么其背后的原理是怎样的呢?接下来将为大家揭开HTTP缓存的神秘面纱。 一、第一次发送HTTP请求 为了方便理解,我们可以简单地认为浏览器存在一个缓存数据库,用于缓存数据。在浏览器第一次请求数据
引言 稍微了解HTTP协议的前端同学,相比对Cache-Control不会感到陌生,性能优化时经常都会跟它打交道。 常见的值有有private、public、no-store、no-cache、mus
这是判断是否启用缓存的第一步。如果浏览器通过某些条件(条件之后再说)判断出来,ok现在这个缓存没有过期可以用,那么连请求都不会发的,直接是启用之前浏览器缓存下来的那份文件,此时状态码为200
我发现了一个商城,我还没有登录,就可以往购物车中添加商品,加了好几件后,我准备付款,需要我先去登录,登录完之后付款。
稍微了解HTTP协议的前端同学,相比对Cache-Control不会感到陌生,性能优化时经常都会跟它打交道。
引言 稍微了解HTTP协议的前端同学,相比对Cache-Control不会感到陌生,性能优化时经常都会跟它打交道。 常见的值有有private、public、no-store、no-cache、must-revalidate、max-age等。 各个取值所代表的含义,网上总结挺多的,这里就不打算再进行逐一介绍,感兴趣的可以一起探讨交流。 本文仅挑no-cache、must-revalidate 这两个进行值进行探究对比。在项目实践中,这两个值用的比较多,也比较容易搞混。 Cache-Control: no
缓存对于Web服务至关重要,尤其对于大型高负载Web站点。缓存作为性能优化的一个重要手段,可以在极大程度上减轻后端服务器的负载。通常对于静态资源,即不经常更新的资源,如图片,CSS或JS等进行缓存,而不用每次都向服务器请求,这样就可以减轻服务器的压力。
浏览器缓存是浏览器在本地磁盘对用户最近请求过的资源进行存储,当访问者再次访问同一资源时,浏览器就可以直接从本地磁盘加载资源,通过缓存的方式就可以减少与服务器的数据传输,减少服务器的负担,加快页面响应速度等。
浏览器强缓存是通过设置HTTP响应头中的Cache-Control和Expires字段来指定浏览器在一定时间内直接从本地缓存中获取资源,而不会向服务器发送请求。这样可以减少网络传输时间,加快页面加载速度。常用的设置有max-age和s-maxage,分别表示资源的缓存时间。
随着用户访问量越来越大,缓存变得越来越重要。HTTP文件缓存可以减少冗余数据的传输;缓解网络瓶颈;降低对原始服务器的请求;以及降低距离延迟。
缓存的作用就是提升网页加载速度。浏览器加载一个完整的网页势必会引用外部资源(图片,js,css)。若每次加载网页都要去加载这些外部资源则会引起不必要的时间和资源浪费,且会影响用户体验。而解决上述问题需要一个优秀的缓存策略。除此之外,web缓存的优点还有很多,例如:减轻服务器压力
上篇文章我们已经介绍了http协议的「无状态特性」以及它的「keep-alive」机制,本文我们继续学习http协议的其它内容,首先我们从「【缓存】」聊起
当浏览器访问服务器端,服务器给予响应时,服务器会根据需求/场景在响应头里告知浏览器,将以下数据缓存下来:
有缓存时,客户端直接从缓训中获取数据。没有时,从服务端取数据。 响应头中控制缓存的有两个字段pragma、Expires和Cache-Control
缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快。 从概念上讲,缓存是一种性能优化策略和设计考虑因素。 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性。
对于网站来说,速度是第一位的。用户总是讨厌等待,面对加载的Video和页面,是非常糟糕的用户体验。所以如何利用Cache来优化网站,值得深入研究。
HTTP 缓存是一块重要的内容,这是作为一个前端工程师必须要掌握的优化技能,也能让自己明白自己的工作,此次主要分了几个点进行总结
很多网站的资源后面都加了版本号,这样做的目的是:每次升级了JS或者CSS文件后,为了防止浏览器进行缓存,强制改变版本号,客户端浏览器就会重新下载新的JS或CSS文件,以保证用户能及时获得网站的最新更新。
本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314.html
一、Web Cache 在介绍Web cache时,我们需要简单介绍缓存的理解 1.1 缓存解释 缓存通常是基于键值对来缓存的,键通过hash计算后,存放于内存某个空间,所以键可以理解为索引。而值是存
HTTP 协议在设计之初,为了保持简单,本身是没有状态的,也就是说,对同一个客户端浏览器而言,上一次对服务器的请求和下一次请求之间是完全独立的、互不关联的,在服务器端并不能识别两次请求是同一个浏览器发起的,在不改变 HTTP 协议本身设计的前提下,为了解决这个问题,引入了 Cookie 技术来管理服务器与客户端之间的状态。
为了提高网站的访问速度和效率,我们需要设计各种各样的缓存,通过缓存可以避免不必要的额外数据传输和请求,从而提升网站的请求速度。对于HTTP协议来说,本身就自带有HTTP缓存。
当服务运行在多台服务器时,为了避免服务器同时占用一个资源,或者重复处理同一个资源,我们需要通过 分布式锁 解决同一时间占用的问题,保证同一时间只有一台服务器处理某些逻辑.
Redis 和 MySQL 是面试绕不过的两座大山,他们一个是关系型数据库的代表(MySQL),一个是键值数据库以及缓存中间件的一哥。尤其 Redis 几乎是所有互联网公司都在用的技术,比如国内的 BATJ、新浪、360、小米等公司;国外的微软、Twitter、Stack Overflow、GitHub、暴雪等公司。我从业了十几年,就职过 4、5 家公司,有的公司用 MySQL、有的用 SQL Server、甚至还有的用 Oracle 和 DB2,但缓存无一例外使用的都是 Redis,从某种程度上来讲 Redis 是普及率最高的技术,没有之一。
Web缓存一般分为浏览器缓存、代理服务器缓存以及网关缓存,本文主要讲的是 浏览器缓存,其它两种缓存大家自行去了解下。
Web缓存分为服务端缓存和客户端缓存。 1 服务端缓存 1.1请求域内的缓存:HttpContext.Items 类型: HttpContext.Items的类型为IDictionary,且键和值都是object类型 访问性: 只存在于当前请求范围内。 例: HttpContext.Items["key"] ="value"; var value = HttpContext.Items["key"]; 1.2用户域内的缓存:HttpContext.Session 类型: HttpContext.Sessio
在 Redis 系列的开篇文章中,我们对 Redis 概述以及 Redis 数据结构与对象进行了详细的讨论以及了解。经过上一篇文章的阅读,相信读者已经对 Redis 的内部结构有了大致了解,接下来我们继续深入了解 Redis 内部结构。
缓存技术出现在HTTP1.1当中,目的是尽可能减少对于服务器进行请求。为了实现缓存技术,HTTP设计者在头部字段增加针对缓存的头部字段。HTTP 缓存有两种方式,强制缓存和协商缓存。
强制缓存:根据Expires(response header里的过期时间)判断,浏览器再次加载资源时,如果在这个过期时间内,则命中强缓存,并不会向服务端发起请求,展示为200状态。
Web 缓存是可以自动保存常见文档副本的 HTTP 设备。当 Web 请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档。使用缓存有下列优点。
我们使用 HTTP 缓存,通过复用缓存资源,减少了客户端等待时间和网络流量,同时也能缓解服务器端的压力。可以显著的提升我们网站和应用的性能。
“缓存一直是前端优化的主战场,利用好缓存就成功了一半。本篇从HTTP请求和响应的头域入手,让你对浏览器缓存有个整体的概念。最终你会发现强缓存,协商缓存 和 启发式缓存是如此的简单。 ” 导读 浏览器对
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),如图所示。
【注】命令中的 xxx 为报错中 NO_PUBKEY 后的 GPG Key 。命令中的 keyserver.ubuntu.com 为提供 GPG Key 对应的 GPG 验证文件的公钥服务器,目前国内可访问的公钥服务器列表如下:
在redis源码中数据库的结构由server.h/redisDb表示, redisDb结构的dict字典保存了数据库中的所有键值对,我们将这个字典称为键空间(key space),redisDb源码:
浏览器缓存动态内容,缓存的内容在浏览器本地,而内容由web服务器生成,任何一方都不可能完成这一系列过程,他们之间有一种沟通机制,这就是缓存协商.
当某一个硬件要读取数据时候,会首先从缓存中查找数据,如果有,直接将数据返回,如果没有再从内存中获取数据。缓存获取数据的速度远比内存快。所以HTTP请求都采用缓存的策略,避免重复请求服务器,增加服务器压力。
本站404页面被IE替换成IE自己的404页面 在权限设置正确的情况下,自定义的404页面文件大小如果小于512字节,那么IE内核的浏览器会认为你自定义的404页面不够权威,从而使用其自带的404页面
Redis自己构建了简单动态字符串(Simple Dynamic String,SDS)来作为默认的字符串表示。 SDS的构造如下:
1 https://www.cnblogs.com/zhuzhenwei918/p/6028414.html
前端发送请求主要经历以下三个过程,请求->处理->响应。 如果有多次请求就需要重复执行这个过程。
领取专属 10元无门槛券
手把手带您无忧上云