使用边缘包含

编辑本页

使用边缘包含

网关缓存是一种让你的网站表现更好的好方法。但是它们有一个限制:它们只能缓存整个页面。如果您的页面包含动态部分,例如用户名或购物车,那么您就不走运了。幸运的是,Symfony为ob娱乐下载这些情况提供了一种解决方案,它基于一种名为应急服务国际公司,或边边包含。Akamai在2001年编写了这个规范,它允许页面的特定部分使用与主页不同的缓存策略。

ESI规范描述了可以嵌入到页面中以与网关缓存通信的标记。在Symfony中只实现了一个标记,ob娱乐下载包括,因为这是Akamai上下文之外唯一有用的:

1 2 3 4 5 6 7 8 9 10 11
<!文档类型超文本标记语言><超文本标记语言><身体><!——……一些内容——><!——在这里嵌入另一个页面的内容——><应急服务国际公司:包括src“http://..”。/><!——……更多内容——>身体>超文本标记语言>

请注意

从示例中可以注意到,每个ESI标记都需要一个完全限定的URL。ESI标记表示可以通过给定URL获取的页面片段。

当处理请求时,网关缓存从它的缓存中获取整个页面,或者从后端应用程序请求它。如果响应包含一个或多个ESI标记,则以相同的方式处理它们。换句话说,网关缓存要么从它的缓存中检索包含的页面片段,要么再次从后端应用程序请求页面片段。在解析完所有ESI标记后,网关缓存将每个ESI标记合并到主页中,并将最终内容发送到客户机。

所有这些都在网关缓存级别透明地发生(即在应用程序之外)。正如您将看到的,如果您选择利用ESI标记,Symfony将使包含它们的过程几乎毫不费力。ob娱乐下载

在Symfony中使用ESob娱乐下载I

首先,要使用ESI,请确保在应用程序配置中启用它:

  • YAML
  • XML
  • PHP
1 2 3 4
#配置/包/ framework.yaml框架:#……应急服务国际公司:真正的

现在,假设您有一个相对静态的页面,除了在内容底部有一个新闻标记。欧宝平台是合法的吗有了ESI,你可以独立缓存页面的其他部分:欧宝平台是合法的吗

12 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ DefaultController.php名称空间应用程序控制器/ /……DefaultController扩展AbstractController{公共函数关于()响应{响应->呈现(“静态/ about.html.twig”);响应->setPublic ();响应->setMaxAge (600);返回响应;}}

在本例中,响应被标记为公共,以使生命周期为10分钟的所有请求都可缓存整个页面。接下来,通过嵌入一个动作将新闻标记包欧宝平台是合法的吗含在模板中。这是通过呈现()助手(有关详细信息,请参见如何在模板中嵌入控制器).

由于嵌入的内容来自另一个页面(或控制器),Symfony使用标准ob娱乐下载渲染帮助配置ESI标签:

1 2 3 4 5 6 7
{/静态/ about.html #模板。树枝#}{#你可以使用控制器引用{{render_esi(controller('App\\ controller \欧宝平台是合法的吗\NewsController::latest', {'maxPerPage': 5}))}}{#……或URL #}{{render_esi (url (latest_欧宝平台是合法的吗news,{“maxPerPage”:5}))}}

通过使用应急服务国际公司渲染器(通过render_esi ()Twig函数),您告诉Symfony该操作应该作为ob娱乐下载ESI标记呈现。您可能想知道为什么要使用帮助器,而不是自己编写ESI标记。这是因为即使没有安装网关缓存,使用helper也可以使应用程序正常工作。

提示

正如您将在下面看到的maxPerPage你传递的变量可以作为控制器的参数(例如:maxPerPage美元).变量通过render_esi也成为缓存键的一部分,这样就可以为每个变量和值的组合拥有唯一的缓存。

使用默认值时呈现()函数(或将呈现器设置为内联),在ob娱乐下载向客户端发送响应之前,Symfony将包含的页面内容合并到主页面内容中。但是如果你用应急服务国际公司渲染器(即调用render_esi ()而且如果Sob娱乐下载ymfony检测到它正在与支持ESI的网关缓存通信,它将生成一个ESI include标记。但是,如果没有网关缓存,或者不支持ESI, Symfony就会将包含的页面内容合并到主页面中,就像您使用的那样ob娱乐下载呈现()

请注意

ob娱乐下载Symfony认为网关缓存支持ESI,如果它的请求包含Surrogate-CapabilityHTTP头的值包含ESI / 1.0字符串任何地方。

嵌入的动作现在可以完全独立于主页来指定它自己的缓存规则:

  • 属性
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14
/ / src /控制器/ News欧宝平台是合法的吗Controller.php名称空间应用程序控制器使用ob娱乐下载组件HttpKernel属性缓存/ /……欧宝平台是合法的吗NewsController扩展AbstractController{#(缓存(smaxage 60)):公共函数最新的(intmaxPerPage响应{/ /……}}

在本例中,嵌入式操作也是公开缓存的,因为所有请求的内容都是相同的。然而,在其他情况下,您可能需要使这个响应是非公共的,甚至是不可缓存的,这取决于您的需要。

将上述所有代码放在一起,使用ESI,整个页面缓存的有效期为600秒,但新闻组件缓存的有效期仅为60秒。欧宝平台是合法的吗

当使用控制器引用时,ESI标记应该将嵌入的动作引用为可访问的URL,以便网关缓存可以独立于页面的其余部分获取它。ob娱乐下载Symfony负责为任何控制器引用生成唯一的URL,并且它能够正确地路由它们FragmentListener必须在您的配置中启用:

  • YAML
  • XML
  • PHP
1 2 3 4
#配置/包/ framework.yaml框架:#……片段:{路径:/ _fragment

ESI呈现器的一大优点是,您可以根据需要使应用程序动态,同时尽可能少地撞击应用程序。

谨慎

片段侦听器只响应已签名的请求。请求仅在使用片段呈现程序和render_esi树枝的功能。

render_esiHelper支持其他三个有用的选项:

alt
用作alt属性,该属性允许您指定要使用的替代URLsrc找不到。
ignore_errors
如果设置为true,则anonerror属性将添加到ESI,值为继续这表明,在发生故障时,网关缓存将无声地删除ESI标记。
absolute_uri
如果设置为true,将生成一个绝对URI。默认的

6.2

absolute_uri选项在Symfony 6.2中引入。ob娱乐下载

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop