全页缓存——速度的需要

已发表: 2020-10-02
speed - Full-Page Caching - The Need For Speed -

网站缓存和整页缓存是加快网站加载时间的技术。 这是一种非常普遍的做法,几乎无处不在,因为它为网站性能带来了巨大的收益。 缓存通过使网络服务器更有效地完成其工作而起作用。 全页缓存是一种更高级的缓存形式,因此要了解全页缓存,让我们从普通缓存开始并从那里构建。

Joe's Auto-Parts Shop – 一个静态网站

1 - Full-Page Caching - The Need For Speed -

想象一下乔。 他是一个拥有并经营着一个装满汽车零件的大型仓库的人。 在仓库的前面是一个柜台,顾客来这里购买他的零件。 当客户到达购买一些零件时,交易遵循以下程序:

  1. 顾客递给乔一份汽车零件清单。
  2. 乔取出第一部分放在柜台上。
  3. 乔取出第二部分放在柜台上。
  4. 依此类推,直到列表结束。
  5. 顾客付钱离开。

那么这如何适用于静态网站呢?

静态网站是不使用任何数据库、PHP 脚本或任何其他程序的网站。 想象一个只有 HTML 页面和图像的简单网站。 Joe 和他的仓库代表这个简单网站的各个部分,如下所示:

  • 仓库是物理服务器。
  • Joe 是网络服务器软件,例如 Apache
  • 汽车零件是构成网站的文件,例如图像和 HTML 文件。

为这个简单站点提供服务的过程是:

  1. 浏览器从服务器上运行的 Apache 请求网页。
  2. Apache 从磁盘读取第一个文件并将其发送到浏览器。
  3. Apache 从磁盘读取第二个文件并将其发送到浏览器。
  4. 依此类推,直到它获取所有内容。
  5. 浏览器显示完成的网页。

这种设置适用于小型网站,但在压力下很快就会失败。

乔变得很忙——缓存节省了一天

2 - Full-Page Caching - The Need For Speed -

乔的系统运行良好,直到他开始忙碌。 事实上,他太忙了,大部分时间都花在从柜台走进仓库,以至于他无法跟上所有新客户的步伐。

乔可以购买一个额外的仓库并雇用其他人在那里工作以满足额外的需求。 但这代价高昂,并不能最大限度地利用他已经拥有的资源。 相反,Joe 考虑如何在他拥有的仓库中提高流程效率。

Joe 意识到,他为客户获取的 90% 的零件都是仅有的 10 个零件之一。因此,他决定将这 10 个零件放在柜台下,以便在有人要时可以立即拿走。 他现在可以直接从柜台处理大多数客户的请求,而无需进入仓库。 这要快得多。

缓存在网络服务器上做了非常相似的事情。 就像 Joe 回到仓库一样,提供静态文件时最慢的操作是从存储设备加载文件。 缓存的作用是将最频繁请求的文件保存在 RAM 中,它们的访问速度比从存储中读取它们的速度快数千倍。

这种类型的缓存适用于图像和其他静态文件,但 WordPress 是一个带有 PHP 脚本和数据库的动态网站。

输入整页缓存。

乔的生活变得复杂——PHP、数据库和缓存

joe - Full-Page Caching - The Need For Speed -

与乔在同一个城镇开设了一家新的丰田车间,他们使用乔来提供备件。 这对乔来说很好,除了一个问题,丰田只按他们的丰田零件号订购零件。 他们给了乔一个巨大的目录,这样他就可以在收到他们的订单时查找丰田零件编号并将它们与仓库中的零件相匹配。

但这让乔又慢了下来。

每当他必须在目录中查找丰田零件时,他都需要很长时间。 即使它是柜台下的零件之一,他也不能随便拿,因为他首先必须在目录中查找丰田零件号。 他将 10 个最需要的部件放在柜台下的旧系统仍然有帮助,但新的目录查找现在是最大的瓶颈。

乔又想了想,想出了一个解决办法。 他注意到大多数丰田订单是少数几个订单中的一个。 因此,他写出了最常见的丰田零件编号及其相应零件的备忘单,然后将其粘贴在工作台面上。

现在他不需要为大部分丰田订单使用目录,他可以浏览备忘单,几乎立即将丰田零件编号转换为他可以获取的零件。

WordPress 网站与 Joe 有类似的问题。 WordPress 在浏览器请求时构建每个网页。 您的浏览器加载的 HTML 页面在您向 WordPress 请求它们之前不存在。

这就是 WordPress 创建网站页面的方式:

  1. 浏览器从 WordPress 请求网页。
  2. PHP 脚本接受请求并查询数据库以获取构建页面所需的内容。
  3. 数据库查找并将所有信息返回给 PHP 进程。
  4. PHP 脚本使用该信息构建页面并将其发送到浏览器。

这是很多工作,也是非缓存 WordPress 网站需要比静态网站多很多倍的计算机资源的原因。

就像 Joe 一样,您的 WordPress 网站经常收到对相同页面的请求,例如您网站的登录页面,因为每次新访问者到达时都会提供此页面。 在非缓存设置中,WordPress 必须使用 PHP 脚本处理此请求并为每个访问者进行数据库查询,即使它每次都创建完全相同的页面。

这导致了大量的重复工作。

全页缓存解决了这个问题。 它注意到某个请求和生成的页面始终相同,因此它将页面的副本缓存在 RAM 中。 它还保留了创建这些页面的请求的备忘单,因此当访问者请求它在直接从 RAM 提供而不是重新创建之前生成的页面时。

通过绕过许多 PHP 进程和数据库查找以及直接从 RAM 提供先前生成的页面,这显着减少了 Web 服务器的工作量。 这可以为您提供一个几乎与静态网站一样高效的动态 WordPress 网站。

缓存和整页缓存是一流的技术,它们利用您的网络服务器的资源来最大化您的网络服务器的效率,并为您提供一个活泼的 WordPress 网站。