使用边缘包含

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 3.4,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

使用边缘包含

网关缓存是一种让你的网站表现更好的好方法。但是它们有一个限制:它们只能缓存整个页面。如果您的页面包含动态部分,例如用户名或购物车,那么您就不走运了。幸运的是,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
# app / config / config.yml框架:#……应急服务国际公司:启用:真正的

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

12 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / AppBundle /控制器/ DefaultController.php/ /……DefaultController扩展控制器公共函数aboutAction()响应->呈现(“静态/ about.html.twig”);//设置共享的最大年龄-这也将响应标记为public响应->setSharedMaxAge (600);返回响应;}}

在本例中,全页缓存的生存期为10分钟。接下来,通过嵌入一个动作将新闻标记包欧宝平台是合法的吗含在模板中。这是通过渲染辅助(见如何在模板中嵌入控制器有关详情)。

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

1 2 3 4 5 6 7
{# app /资源/视图/静态/ about.html。树枝#}{#你可以使用控制器引用{{render_esi(controller('AppBundle:N欧宝平台是合法的吗ews: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通过另一个由Symfony反向代理开箱即用的Akamai规范来检测网关缓存是否支持ESI。

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

12 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / AppBundle /控制器/ Ne欧宝平台是合法的吗wsController.php名称空间AppBundle控制器/ /……欧宝平台是合法的吗NewsController扩展控制器公共函数latestActionmaxPerPage/ /……响应->setSharedMaxAge (60);返回响应;}}

使用ESI,整个页面缓存的有效期为600秒,但新闻组件缓存的有效期仅为60秒。欧宝平台是合法的吗

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

  • YAML
  • XML
  • PHP
1 2 3 4
# app / config / config.yml框架:#……片段:路径:/ _fragment

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

谨慎

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

请注意

一旦开始使用ESI,请记住始终使用s-maxage指令而不是信息.由于浏览器只接收到聚合的资源,所以它不知道子组件,因此它将服从信息指令并缓存整个页面。这是你不想要的。

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

alt
用作alt属性,该属性允许您指定要使用的替代URLsrc找不到。
ignore_errors
如果设置为true,则anonerror属性将添加到ESI,值为继续这表明,在发生故障时,网关缓存将无声地删除ESI标记。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。