• 正文
  • 相关推荐
申请入驻 产业图谱

什么是Cache?

2022/08/25
949
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

缓存(caching)是将内容(网页、图片等)存储在请求者附近的过程,以便这些内容加载更快。

  • 当你加载一个网页或一个应用时,你是在向服务器请求文件,而这个服务器可能在物理上是很远的开发人员会将内容缓存到离你更近的服务器上,这样网页和应用的加载速度就会更快因为网页和应用总是在变化,你可以在缓存内容上设置一个计时器来强制其过期称为CND的专门服务器网络可以让你在全球范围内轻松缓存内容

几乎你使用的每个网站都以某种或另一种格式被缓存,这是现代web应用程序构建的重要组成部分(同时,这是计算机科学学位没教你的内容)。

拯救大兵延迟

没有人喜欢网页速度慢。但是,如果你想想,从你在浏览器中输入gmail.com到你真正看到你的电子邮件之间发生的所有事情,它发生得如此之快,几乎总是在一秒钟之内,这完全是一个奇迹。让我们来看看这个过程到底发生了什么:

  • 客户端向服务器发出请求(例如,你输入gmail.com)服务器确定发送回客户机的内容(查询数据库等)服务器将内容(网页,图像等)发送给客户端客户端浏览器呈现页面和内容

这已经很多了,我们甚至还没有涉及到像TCP握手这样的协议过程。这些步骤中的每一步都需要时间(通常是几百毫秒),当服务器离得很远时,这些步骤会累加起来。仔细想想,你可以将这些“速度问题”分解为两个核心问题:

  1. 逻辑:加载一个网页需要一个步骤位置:服务器可能非常远,数据传输需要时间

缓存可以帮助解决这些问题,它将现成的文件(预先制作好的网页、图片等)存储在离应用最终用户更近的特殊服务器上。缩短了内容的物理距离,加快了加载时间,而且预制文件使原来的web服务器不必再次处理请求逻辑。

源服务器是应用程序或网站用来响应请求和构建网页的核心web服务器。代理服务器是介于用户和原始服务器之间的中间服务器,负责缓存等事务。

从逻辑上讲,你可以通过自己建立一个特殊的服务器(不太常见),或者使用AWS Cloudfront或Cloudflare这样的服务来缓存文件。我们将在下面更多地讨论这些。

有一点要记住:Nielsen Norman Group广泛使用的标准指出,超过1秒的响应时间就会开始打断用户的思维流,并产生负面的用户体验。出于这个原因,公司们投入了大量精力使他们的网站和应用尽可能快,这就是缓存如何发挥作用的背景。

缓存101:RTT、TTL和各种缩略词你可以把缓存归入“非常可怕的、使用大量缩写词的网络技术和协议”文件夹。让我们来解剖一下缓存并定义一些你将会遇到的术语。

RTT(Round Trip Time):从用户发出请求(你在浏览器中输入URL或单击链接)到结果返回给请求者所花费的总时间。缓存的目标是降低这个值。

TTL(Time to Live):缓存有一个大问题,它们是静态的,这意味着如果你改变你的应用(一个新功能,一个bug修复,等等),缓存仍然会有旧版本。为了解决这个问题,文件缓存通常携带一个TTL(秒、分钟、小时),你可以定义缓存内容在需要刷新之前的持续时间。

Hits and misses:开发人员经常使用术语“hit”来表示向服务器发出请求并缓存了内容(success)。miss是指内容没有被缓存(或者需要刷新),因此你的请求需要一直到源服务器才能得到满足。

如果缓存miss,那并不意味着你无法获得你的网页,它只是意味着代理服务器需要将你的请求转发到源服务器,获取结果,发送给你,然后缓存它们以备将来使用。

CDN(Content Delivery Network):建立和运行你自己的服务器只是为了实现一个缓存,这会非常麻烦,有外包的选择。CDN是一个服务器网络(通常是全球性的),你可以接入并缓存你的内容。典型的例子是Cloudflare,但AWS、Google和Azure也有自己的。

Compression and minification:一旦你使用了缓存,你就可以随意修改你的文件,让它们更容易在网络上发送。如果你曾经解压缩过文件,那么你对压缩已经很熟悉了,而且许多缓存服务器默认都启用了压缩协议。开发人员还将通过删除注释、空格、新行和任何人类可读性所需的东西来缩小他们的代码。这两种方法都使文件更小,从而加快了传输速度,降低了关键指标RTT。

缓存的类型:服务器和浏览器

典型的缓存设置包括如何正确地将文件保存在服务器上,通过TTL处理过期,以及诸如此类的事情。但是服务器或CDN并不是缓存发生的唯一地方;在你的笔记本电脑、手机或电脑上,在你的浏览器里缓存着大量的数据。浏览器也会缓存内容,特别是当你经常访问一个网站的时候。

你的浏览器缓存的行为就像一个专门的缓存服务器,但节省更多的时间,因为你的请求根本不必离开你的浏览器。例如,如果你正在加载某网站的主页,布局的基本部分,如模板HTML或CSS可能会被缓存。这样,当你重新加载页面时,就不需要再次获取所有这些文件。

浏览器缓存有助于解释为什么重新加载页面会比第一次加载页面更快,以及为什么有时会出现一个“陈旧”的页面,你不断地刷新,但没有显示你正在寻找的新内容。你也可以随时清除浏览器缓存。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录