使用边缘包含
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.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
#配置/包/ 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-Capability
HTTP头的值包含ESI / 1.0
字符串任何地方。
嵌入动作现在可以完全独立于母版页指定自己的缓存规则:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ News欧宝平台是合法的吗Controller.php名称空间应用程序\控制器;/ /……类欧宝平台是合法的吗NewsController扩展AbstractController{公共函数最新的(int$maxPerPage):响应{/ /……$响应->setPublic ();$响应->setMaxAge (60);返回$响应;}}
在本例中,嵌入式操作也是公开缓存的,因为所有请求的内容都是相同的。然而,在其他情况下,您可能需要使这个响应是非公共的,甚至是不可缓存的,这取决于您的需要。
将上述所有代码放在一起,使用ESI,整个页面缓存的有效期为600秒,但新闻组件缓存的有效期仅为60秒。欧宝平台是合法的吗
当使用控制器引用时,ESI标记应该将嵌入的动作引用为可访问的URL,以便网关缓存可以独立于页面的其余部分获取它。ob娱乐下载Symfony负责为任何控制器引用生成唯一的URL,并且它能够正确地路由它们FragmentListener必须在您的配置中启用:
- YAML
- XML
- PHP
1 2 3 4
#配置/包/ framework.yaml框架:#……片段:{路径:/ _fragment}
ESI呈现器的一大优点是,您可以根据需要使应用程序动态,同时尽可能少地撞击应用程序。
谨慎
片段侦听器只响应已签名的请求。请求仅在使用片段呈现程序和render_esi
树枝的功能。
的render_esi
Helper支持其他两个有用的选项:
-
alt
-
用作
alt
属性,该属性允许您指定要使用的替代URLsrc
找不到。 -
ignore_errors
-
如果设置为true,则an
onerror
属性将添加到ESI,值为继续
这表明,在发生故障时,网关缓存将无声地删除ESI标记。