缓存静态和动态内容|它是如何工作的?

与静态内容不同,动态内容对于每个用户而言都是不同的,这也意味着无法将其提供给多个用户,并且很难进行高速缓存。但是,使用正确的技术可以高速缓存动态内容。

Share facebook icon linkedin icon twitter icon email icon

缓存静态内容与动态内容

学习目标

阅读本文后,您将能够:

  • 区分静态内容与动态内容
  • 了解为何难以缓存动态内容,以及新技术如何使缓存动态内容成为可能
  • 了解动态内容缓存和动态内容压缩之间的区别
  • 了解Edge Side Includes标签如何使缓存动态网页的静态部分成为可能

静态内容和动态内容有什么区别?

静态内容是存储在服务器中的任何文件,并且每次交付给用户时都是相同的。HTML文件和图像就是此类内容的示例。静态内容就像报纸:发行一期报纸后,无论日后有什么新进展,它都只会为所有索取副本的人提供相同的文章和照片。

动态内容是根据用户特定的因素(例如访问时间,位置和设备)而变化的内容。一个动态的网页对于每个人来说看起来都不一样,并且可以随着用户与之交互而改变,就像一张可以在有人阅读时重新书写的报纸一样。这使网页更加个性化和更具交互性。

高速缓存静态内容

高速缓存动态内容

现代新闻网站是动态内容的一个很好的例子:与报纸不同,文章是全天更新的,并且首页可能会根据站点访问者的位置或登录状态显示不同的标题。社交媒体页面是另一个示例:Facebook新闻提要对于每个用户而言看起来完全不同,用户能够与内容进行交互以更改内容(通过喜欢,分享或评论帖子)。

动态网页不存储为静态HTML文件。相反, 服务器端脚本会响应事件(例如用户交互或用户登录)生成HTML文件,并将HTML文件发送到网页浏览器。因为动态内容是在服务器端生成的,所以通常由原始服务器 ,而不是由缓存提供服务。

长期以来,动态内容被认为是不可缓存的。但是新技术允许网站从缓存中提供动态内容,从而在保持用户体验交互性的同时,大大减少了延迟

如何缓存静态内容?

通常的网页缓存过程是缓存在内容提供时保存静态文件(例如图像)的副本,以便它更接近用户并在下一次更快地交付。浏览器和内容分发网络(CDNs) 可以在设置的时间段内缓存静态内容,并将其提供给用户,只要继续请求该内容即可。能满足这种可能性是因为静态内容不会随时间变化;相同的文件可以一遍又一遍地交付给用户。

动态内容缓存如何工作?

动态内容由更改页面内容的脚本生成。通过在CDN缓存中而不是在远程原始服务器中运行脚本,可以生成动态内容并从缓存中传递动态内容。因此,动态内容本质上是"缓存" ,不必从源头开始一直提供,减少了对客户端请求的响应时间,并加快了动态网页的速度。

例如,Cloudflare Workers是在Cloudflare的 CDN 上运行的无服务器 JavaScript 函数。它们可以响应各种事件和输入,包括设备类型、时间、用户位置或来自第三方 API 的数据。根据这些参数,可以生成动态内容并将其提供给客户端设备,也可以从缓存中更改、缓存或清除静态内容。

因为Cloudflare Workers是JavaScript代码,所以除了缓存动态内容外,开发人员还可以使用它们来构建各种功能或整个应用程序。此外,可以部署Cloudflare Workers,并可以在几秒钟内传播到全球CDN位置。

Cloudflare Workers在轻量级执行环境中运行,以便代码可以旋转并在毫秒内执行 。它们使开发人员可以运行代码而不必担心配置后端。了解有关无服务器计算更多信息。

动态内容缓存和动态内容压缩之间有什么区别?

加快动态网页速度的另一种方法是压缩由原始服务器生成的动态内容,并尽可能快速且高效地交付它。通过动态压缩,内容仍然来自原始服务器而不是缓存,但是生成的HTML文件明显较小,因此它们可以更快地到达客户端设备。 Railgun 是压缩动态内容,提高性能的产品示例。

使用Edge Side Includes(ESI)如何加快动态网页的速度?

通常,动态网页上的大量内容对于所有用户而言都是一致的,并且页面上只有某些元素是动态的。这意味着在页面的每个动态副本中,许多HTML代码都是重复的。为了解决这种低效率问题,许多公司共同开发了Edge Side Includes(ESI),这是一种标记语言,用于指定动态内容在网页上的显示位置。 (ESI在某些CDN上使用,但尚未被W3C(管理Web标准的组织)接受。)

从其他地方获取带有ESI标签的内容,而其余网页内容则可以缓存。如果仅动态生成一部分网页,其余部分被缓存,该网页的加载速度相比为每个用户生成整个页面要快得多。 ESI可以与Cloudflare Workers 结合使用,以使流程更加高效。