使用边缘包含
编辑本页警告:您正在浏览的文档欧宝官网下载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扩展控制器{公共函数latestAction($maxPerPage){/ /……$响应->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_esi
Helper支持其他两个有用的选项:
-
alt
-
用作
alt
属性,该属性允许您指定要使用的替代URLsrc
找不到。 -
ignore_errors
-
如果设置为true,则an
onerror
属性将添加到ESI,值为继续
这表明,在发生故障时,网关缓存将无声地删除ESI标记。