HTTP缓存

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.2,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

HTTP缓存

丰富的web应用程序的本质意味着他们的动态。无论多么高效的应用程序,每个请求总是含有更多的开销比静态文件。

对大多数Web应用程序中,这很好。ob娱乐下载Symfony2闪电快,除非你是做一些严肃的繁重,每个请求很快会回来没有把太多的压力在你的服务器上。

但是随着你的站点,开销就会变成一个问题。通常对每个请求执行的处理应该做一次。这正是缓存旨在完成。

缓存在巨人的肩膀上

最有效的方法来提高性能的应用程序缓存页面的全部输出,然后绕过每个后续请求的应用程序完全。当然,这并不总是可能的高度动态的网站,还是?在这一章,你会看到Symfony2缓存系统是如何工作的,为什么这是最好的ob娱乐下载方法。

Symfob娱乐下载ony2缓存系统是不同的,因为它依赖于简单和HTTP缓存中定义的HTTP规范。重塑一个缓存方法,而是Symfony2拥抱的标准定义了基本的沟通在网上。ob娱乐下载一旦你理解了基本的HTTP验证和过期的缓存模型,你会准备主Symfony2缓存系统。ob娱乐下载

为了学习如何与Symfony2缓存,主题是覆盖在四个步骤:ob娱乐下载

  1. 一个网关缓存反向代理,是一个独立的应用程序层,坐在前面。反向代理缓存响应,他们从您的应用程序和答案回来请求与缓存的响应之前触及您的应用程序。ob娱乐下载Symfony2提供自己的反向代理,但任何可以使用反向代理。
  2. HTTP缓存头与网关通信使用缓存和其他缓存应用程序和客户端之间。ob娱乐下载Symfony2提供合理的默认值和一个强大的交互接口缓存头。
  3. HTTP过期和验证两个模型用于确定缓存的内容是什么新鲜的(可以从缓存中重用)或不新鲜的(由应用程序应该再生)。
  4. 边边包括(ESI)允许HTTP缓存来缓存页面片段独立(甚至嵌套的片段)。应急服务国际公司,你甚至可以缓存整个页面为60分钟,但是嵌入式栏只有5分钟。

由于与HTTP缓存并不是唯一的Symfony,很多文章已经存在的主题。ob娱乐下载如果你是新到HTTP缓存,瑞安Tomayko一起合作编写的文章缓存做的事情高度推荐。另一个深入的资源是马克诺丁汉的缓存教程

网关缓存的缓存

与HTTP缓存时,缓存应用程序完全分开,应用程序和客户端之间的请求。

缓存的工作是接受来自客户端的请求并将其传递回您的应用程序。缓存还将接收响应从您的应用程序和转发到客户端。缓存是“中间人”的请求-响应客户端和应用程序之间的通信。

一路上,缓存将存储每个响应,被认为是“缓存”HTTP缓存)。请求相同的资源时,缓存将缓存的响应发送到客户端,完全无视您的应用程序。

这种类型的缓存被称为HTTP网关缓存和许多存在等清漆,乌贼在反向代理模式,Symfony2反ob娱乐下载向代理。

类型的缓存

但是一个网关缓存并不是唯一类型的缓存。事实上,您的应用程序发送的HTTP缓存头消耗和解释了三个不同类型的缓存:

  • 浏览器缓存:每个浏览器都有自己的本地缓存,主要是用于当你点击“返回”或对图像和其他资产。浏览器缓存私人缓存不与任何人共享缓存的资源;
  • 代理缓存:一个代理共享缓存可以在一个尽可能多的人。通常是由大公司和互联网服务供应商安装减少延迟和网络流量;
  • 网关缓存:就像一个代理,它也是一个共享但是在服务器端缓存。由网络管理员安装,它使网站更加可伸缩、可靠和高性能。

提示

网关缓存有时也被称为反向代理缓存,代理缓存,甚至HTTP加速器。

请注意

的意义私人共享缓存将变得更加明显,当缓存响应包含的内容是特定于一个用户(如帐户信息)进行了探讨。

每个响应从您的应用程序可能会经过一个或两个前两个缓存类型。这些缓存超出你的控制,但遵循HTTP缓存方向设置的响应。

ob娱乐下载Symfony2反向代理

ob娱乐下载Symfony2附带了一个反向代理(也称为网关缓存)用PHP编写的。使它和缓存响应从您的应用程序将被缓存。安装一样容易。每一个新的Symfob娱乐下载ony2应用程序附带了一个预配置缓存内核(AppCache)包装默认一个(AppKernel)。内核缓存反向代理。

要启用缓存,修改代码的前端控制器使用内核缓存:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /网络/ app.phprequire_once__DIR__“/ . . / app / bootstrap.php.cache”;require_once__DIR__“/ . . / app / AppKernel.php”;require_once__DIR__“/ . . / app / AppCache.php”;使用ob娱乐下载\组件\HttpFoundation\请求;美元内核=AppKernel (“刺激”,);美元内核- >loadClassCache ();/ /包的默认AppKernel AppCache美元内核=AppCache (美元内核);美元请求=请求::createFromGlobals ();美元响应=美元内核- >处理(美元请求);美元响应- >send ();美元内核- >终止(美元请求,美元响应);

内核将立即作为反向代理缓存,缓存的响应从你的应用程序并返回给客户机。

提示

内核有一个特殊的缓存getLog ()方法返回的字符串表示发生在缓存层。在开发环境中,用它来调试和验证您的缓存策略:

1
error_log (美元内核- >getLog ());

AppCache对象有一个合理的缺省配置,但它可以通过一组精细选项可以设置通过重写getOptions ()方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / app / AppCache.php使用ob娱乐下载\\FrameworkBundle\HttpCache\HttpCache;AppCache扩展HttpCache{受保护的函数getOptions(){返回数组(“调试”= >,“default_ttl”= >0,“private_headers”= >数组(“授权”,“饼干”),“allow_reload”= >,“allow_revalidate”= >,“stale_while_revalidate”= >2,“stale_if_error”= >60,);}}

提示

除非覆盖getOptions (),调试选项将被设置为自动调试包装的价值AppKernel

这里是一个列表的主要选项:

  • default_ttl:的秒数缓存条目应该考虑新鲜没有提供明确的新鲜度信息在一个响应。显式的cache - control到期头覆盖这个值(默认值:0);
  • private_headers:设置请求头,触发“私人”cache - control行为反应不明确状态是否响应公共私人通过一个cache - control指令。(默认值:授权饼干);
  • allow_reload:指定客户端是否可以通过包括强制缓存刷新cache - control“no - cache指令”的请求。将其设置为真正的为符合RFC 2616(默认值:);
  • allow_revalidate:指定客户端是否可以通过包括强制缓存重新验证cache - control“信息= 0”指令的要求。将其设置为真正的为符合RFC 2616(默认值:false);
  • stale_while_revalidate:指定默认的秒数(粒度是第二个TTL精确的响应是一个秒)中缓存可以立即返回一个陈旧的响应而重新验证它在后台(默认值:2);这个设置是覆盖的stale-while-revalidateHTTPcache - control扩展(见RFC 5861);
  • stale_if_error:指定默认的秒数(粒度是第二),缓存可以过期响应当遇到一个错误(默认值:60)。这个设置是覆盖的stale-if-errorHTTPcache - control扩展(RFC 5861)。

如果调试真正的,Sob娱乐下载ymfony2自动添加一个X-ob娱乐下载Symfony-Cache头来响应包含有用的信息缓存命中率和未命中率。

Symfob娱乐下载ony2反向代理是一个伟大的工具开发你的网站或者当您部署时使用你的网站到一个共享的主机,你不能安装任何超出的PHP代码。但是是用PHP编写的,它不能以最快的速度用c语言编写的一个代理为什么强烈建议你使用清漆或鱿鱼生产服务器,如果可能的话。好消息是,从一个代欧宝平台是合法的吗理服务器切换到另一个是容易的和透明的在您的应用程序不需要修改代码。开始容易Symfony2反向代理和升级后ob娱乐下载清漆当你流量增加。

在用清漆Symfony2的更多信息,见ob娱乐下载如何使用清漆本章。

请注意

Symfony2反向代理的性能是独立于应用程序ob娱乐下载的复杂性。这是因为应用程序内核只是启动时需要转发请求。

介绍HTTP缓存

利用可用的缓存层,应用程序必须能够响应缓存和沟通的规则,这些规则控制何时/如何缓存应该成为过时。这是通过设置HTTP缓存响应标头。

提示

记住,“HTTP”只不过是语言(一个简单的文本语言),web客户端(例如浏览器)和web服务器使用与对方交流。HTTP缓存是语言的一部分,它允许客户端和服务器交换信息相关的缓存。

HTTP指定四个响应缓存头,看着这里:

  • cache - control
  • 到期
  • ETag
  • last - modified

最重要的和最多才多艺的头的cache - control头,这实际上是一个集合各种缓存信息。

请注意

每个头将详细解释HTTP缓存部分。

cache - control头

cache - control头的独特之处在于,它包含不止一个,但各种信息的可缓存性响应。每一块的信息是由一个逗号分开:

cache - control:私人信息= 0,must-revalidate

cache - control:信息= 3600,must-revalidate

ob娱乐下载Symfony提供了一个抽象的cache - control头创造使其更易于管理的:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ /……使用ob娱乐下载\组件\HttpFoundation\响应;美元响应=反应();/ /响应标记为公共或私人美元响应- >setPublic ();美元响应- >setPrivate ();/ /设置私人或共享最大年龄美元响应- >setMaxAge (600年);美元响应- >setSharedMaxAge (600年);/ /设置一个定制的cache - control指令美元响应- >- >addCacheControlDirective (“must-revalidate”,真正的);

公共和私人的反应

网关和代理缓存都视为“共享”缓存的缓存的内容由多个用户共享。如果一个特定于用户的响应曾经错误地存储在共享缓存,它可能会返回后任意数量的不同的用户。想象一下,如果你的账户信息被缓存,然后回到每一个后续的用户要求他们的帐户页面!

处理这种情况,每个响应可能被设置为公共或私人:

  • 公共:表明响应可以由私人和共享缓存的缓存;
  • 私人:表明响应消息的全部或部分是针对单个用户,不能缓存共享缓存。

ob娱乐下载Symfony保守违约每个响应是私有的。利用共享缓存(比如Symfony2反向代理),响应需要显式地设置为公开。ob娱乐下载

安全的方法

HTTP缓存只适用于“安全”的HTTP方法(比如GET和HEAD)。安全意味着你不会更改服务器上的应用程序的状态当服务请求(当然你可以日志信息,缓存数据,等等)。这有两个非常合理的后果:

  • 你应该从来没有改变您的应用程序的状态当响应GET或请求。即使你不使用一个网关缓存,代理缓存的存在意味着任何GET或HEAD请求实际上可能会或可能不会达到您的服务器;
  • 不要指望PUT、POST或删除缓存的方法。这些方法是变异时使用您的应用程序的状态(例如删除博客)。缓存会阻止某些请求和变异的应用程序。

缓存规则和违约

HTTP 1.1允许缓存任何默认情况下,除非有一个明确的cache - control头。在实践中,大多数缓存当请求有一个饼,一个授权头,使用non-safe方法(例如PUT、POST、DELETE),或者当反应有一个重定向状态代码。

ob娱乐下载Symfony2自动设置一个合理的和保守的cache - control头时由开发人员遵循这些规则:

  • 如果没有定义缓存头(cache - control,到期,ETaglast - modified),cache - control被设置为no - cache不,这意味着响应将被缓存;
  • 如果cache - control是空的(但另一个缓存头存在),它的值被设置为私人的,must-revalidate;
  • 但如果至少有一个cache - control指令集,没有“公共”或私人指令已被显式地添加,Symfony2补充道ob娱乐下载私人(除非自动指令s-maxage设置)。

HTTP过期和验证

HTTP规范定义了两个缓存模型:

  • 失效模式多久,只需指定一个响应应考虑由包括一个“新鲜”cache - control和/或一个到期头。缓存,理解过期不会犯同样的请求,直到缓存版本达到过期时间,成为“陈旧的”;
  • 当页面是动态(即表示经常改变),验证模型通常是必要的。在这个模型中,缓存存储响应,但问服务器的每个请求缓存的响应是否仍然有效。应用程序使用一个惟一的标识符(响应Etag和/或时间戳(头)last - modified头),以检查是否改变了由于缓存的页面。

两种模型的目标是永远不会产生相同的反应两次依靠一个缓存来存储并返回“新鲜”的反应。

HTTP规范定义了一个简单但功能强大的语言的客户端和服务器可以交流。作为web开发人员,规范的请求-响应模式主导你的工作。不幸的是,实际的规范文档RFC 2616——很难阅读。

有一个正在进行的工作(HTTP Bis)重写RFC 2616。它不描述HTTP的新版本,但主要是澄清原始HTTP规范。组织也改进规范分为七个部分;一切有关HTTP缓存可以在两个专用部分(P4 -条件要求P6 -缓存:浏览器和中介缓存)。

作为web开发人员,您是强烈敦促阅读规范。它的清晰度和权力——甚至超过十年后成立,是非常宝贵的。不要推脱的外观规范,其内容比封面更美丽。

过期

过期模型更有效和简单的两个缓存模型,应该尽可能地使用。响应缓存过期时,缓存将存储的响应并返回它直接触及应用程序,直到它到期。

失效模式可以实现使用两种,几乎相同,HTTP头信息:到期cache - control

过期的到期

根据HTTP规范”到期头部字段提供一个日期/时间的反应被认为是过时的。”的到期标题可以设置的setExpires ()响应方法。需要一个DateTime实例作为一个参数:

1 2 3 4
美元日期=DateTime ();美元日期- >修改(+ 600秒的);美元响应- >setExpires (美元日期);

生成的HTTP头是这样的:

1
到期:星期四,2011年3月01 16:00:00格林尼治时间

请注意

setExpires ()方法自动将日期转换为格林尼治时间时区的要求规范。

注意,在HTTP 1.1之前版本起源服务器不需要发送日期头。因此缓存(如浏览器)可能需要依靠当地的时钟来评估到期头的寿命计算容易时钟歪斜。另一个限制到期头是规范规定,“不应该发送HTTP / 1.1服务器到期在未来日期超过一年。”

过期的cache - control

因为到期头的局限性,大多数时候,你应该使用cache - control头。回忆,cache - control头用于指定不同的缓存指令。过期,有两个指令,信息s-maxage。第一个是所有缓存使用的,而第二个是只考虑共享缓存:

1 2 3 4 5 6
/ /设置的秒数后响应/ /不应该再被认为是新鲜的美元响应- >setMaxAge (600年);/ /同上,但只有共享缓存美元响应- >setSharedMaxAge (600年);

cache - control头将承担以下格式(它可能有额外的指令):

1
cache - control:信息= 600,s-maxage = 600

验证

当一个资源需要更新一旦改变底层数据,过期模型不足。与失效模型,应用程序不会被要求返回更新后的响应,直到缓存最终变得陈旧。

验证模型解决了这个问题。在这种模式下,缓存继续存储的响应。不同的是,对于每个请求,缓存要求应用程序缓存的响应是否仍然有效。如果缓存仍然有效,您的应用程序应该返回304状态码,没有内容。这告诉缓存,可以返回缓存的响应。

在这种模式下,你主要是节省带宽表示不发送两次相同的客户机(304响应发送)。但是如果你仔细设计您的应用程序,你可以获得最低限度的数据需要发送一个304响应也节省CPU实现示例(见下文)。

提示

304状态代码的意思是“修改”。这很重要,因为这种响应状态码包含被请求的实际内容。相反,反应是一个轻量级的方向告诉缓存,它应该使用存储的版本。

像过期,有两种不同的HTTP头信息,可用于实现验证模型:ETaglast - modified

验证的ETag

ETag头是一个字符串头(称为“实体标记”)的唯一地标识一个表示目标资源。完全由应用程序生成,所以你可以告诉,例如,如果/对资源存储的缓存是最新的与您的应用程序将返回。一个ETag就像一个指纹并用于快速比较两个不同版本的资源如果是等价的。像指纹一样,每个ETag必须是唯一的所有表示相同的资源。

看到一个简单的实现,生成md5 ETag的内容:

1 2 3 4 5 6 7 8 9
公共函数indexAction(){美元响应=美元- >呈现(“MyBundle:主要:index.html.twig”);美元响应- >setETag (md5 (美元响应- >getContent ()));美元响应- >setPublic ();/ /确保公共/缓存响应美元响应- >isNotModified (美元- >getRequest ());返回美元响应;}

isNotModified ()方法比较ETag发送的请求上的一组响应。如果两个匹配,自动设置的方法响应状态码304。

这个算法很简单,非常通用的,但是你需要创建整个响应能够计算出ETag之前,这是次优的。换句话说,它可以节省带宽,但不是CPU周期。

HTTP缓存节中,您将看到如何验证可以使用更加智能地决定一个缓存的有效性没有做这么多工作。

提示

ob娱乐下载Symfony2还支持弱etag通过真正的作为第二个参数setETag ()方法。

验证的last - modified

last - modified头是第二个表单的验证。根据HTTP规范”last - modified头字段显示的日期和时间起源服务器认为表示最后修改。”In other words, the application decides whether or not the cached content has been updated based on whether or not it's been updated since the response was cached.< /p>

例如,您可以使用所需的所有对象的最新更新日期计算资源表示的值last - modified头的值:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
公共函数showAction(美元articleSlug){/ /……美元articleDate=\ DateTime (美元文章- >getUpdatedAt ());美元authorDate=\ DateTime (美元作者- >getUpdatedAt ());美元日期=美元authorDate>美元articleDate吗?美元authorDate:美元articleDate;美元响应- >setLastModified (美元日期);/ /设置响应作为公共。否则会默认是私有的。美元响应- >setPublic ();如果(美元响应- >isNotModified (美元- >getRequest ())) {返回美元响应;}/ /……做更多的工作来填充完整的响应内容返回美元响应;}

isNotModified ()方法比较if - modified - since头发出的请求last - modified头的响应。如果他们是等价的,响应将被设置为一个304状态码。

请注意

if - modified - since请求头等于last - modified头的响应发送给特定的客户资源。这是客户端和服务器相互通信并决定资源是否已经更新自缓存。

优化你的代码与验证

任何缓存策略的主要目的是减轻负载应用程序。换句话说,你在你的应用程序返回一个304响应,越好。的回应::isNotModified ()方法准确,通过公开的一种简单而有效的模式:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34
使用ob娱乐下载\组件\HttpFoundation\响应;公共函数showAction(美元articleSlug){/ /获得最低的信息来计算/ / ETag或last - modified价值/ /(基于请求,检索数据/ /数据库或一个键值存储为例)美元文章=……;/ /创建一个与ETag和/或last - modified响应头中美元响应=反应();美元响应- >setETag (美元文章- >computeETag ());美元响应- >setLastModified (美元文章- >getPublishedAt ());/ /设置响应作为公共。否则会默认是私有的。美元响应- >setPublic ();/ /检查不修改给定的请求的响应如果(美元响应- >isNotModified (美元- >getRequest ())) {/ /返回304立即响应返回美元响应;}其他的{/ /做更多的工作,更喜欢检索数据美元评论=……;/ /或呈现一个模板与美元的响应你已经开始返回美元- >呈现(“MyBundle: MyController: article.html.twig”,数组(“文章”= >美元文章,“评论”= >美元评论),美元响应);}}

响应不修改isNotModified ()自动设置响应状态代码304年,删除内容,删除一些标题,不能出席304年反应(见setNotModified ())。

不同的响应

到目前为止,这是假定每个URI都有一个目标资源的表示。默认情况下,HTTP缓存是通过使用资源的URI作为缓存键。如果两个人请求相同的缓存资源的URI,第二个人将接收缓存的版本。

有时这是不够的,不同版本的相同的URI需要基于一个或多个请求报头值缓存。例如,如果您压缩页当客户机支持它,任何给定的URI有两个表示:当客户端支持压缩,和一个不。这决心的价值是通过接受编码请求头。

在这种情况下,您需要缓存中存储的压缩和未压缩版本响应特定的基于请求的URI和归还接受编码价值。这是通过使用不同响应头,这是一个以逗号分隔的不同标题的价值观引发的不同表示请求的资源:

1
不同:接受编码,用户代理

提示

这个特殊的不同头会缓存不同版本的每个资源URI和值的基础上接受编码用户代理请求头。

响应对象提供了一个干净的界面来管理不同标题:

1 2 3 4 5
/ /设置一个不同的头美元响应- >setVary (“接受编码”);/ /设置多个不同头文件美元响应- >setVary (数组(“接受编码”,“用户代理”));

setVary ()方法接受一个头名称或标题名称的数组的响应不同。

过期和验证

您当然可以使用验证和过期在相同的响应。过期赢在验证,您可以很容易地受益于两全其美。换句话说,通过使用过期和验证,您可以指示缓存服务缓存的内容,虽然检查回顾一些间隔(过期)验证内容仍然有效。

更反应的方法

响应缓存相关类提供了更多的方法。这里是最有用的:

1 2 3 4 5
/ /标志着陈旧的响应美元响应- >到期();/ /力响应返回一个合适的304响应没有内容美元响应- >setNotModified ();

此外,大多数可以通过设置缓存相关的HTTP头单身setCache ()方法:

1 2 3 4 5 6 7 8 9
/ /设置缓存设置在一个电话美元响应- >setCache (数组(“etag”= >美元etag,“last_modified”= >美元日期,“max_age”= >10,“s_maxage”= >10,“公共”= >真正的,/ /“私人”= >真的,));

使用边缘方面包括

网关缓存是一个伟大的方式,让你的网站有更好的表现。但是他们有一个限制:他们只能缓存整个页面。如果你不能缓存整个页面或者页面的部分有“更多”的动态部分,你运气不好。幸运的是,Symfony2ob娱乐下载这些情况下,提供了一个解决方案基于技术应急服务国际公司包括,或者边一边。Akamai写此规范近10年前,它允许页面的特定部分比主页有不同的缓存策略。

应急服务国际公司规范描述标签可以嵌入在页面缓存与网关进行通信。只有一个标签是Symfony2中实现,ob娱乐下载包括外,这是唯一有用的Akamai上下文:

1 2 3 4 5 6 7 8 9 10 11
< ! DOCTYPEhtml><html><身体>< !——……一些内容- - >< !——嵌入另一个页面的内容- - ><应急服务国际公司:包括src=“http://..”。/ >< !——……更多内容- - >< /身体>< /html>

请注意

注意每个ESI标签的例子有一个完全限定的URL。一个ESI标记表示一个页面片段,可以通过给定的URL获取。

当请求处理时,网关缓存获取整个页面的缓存或从后端应用程序的请求。如果响应包含一个或多个ESI标签,这些都是用同样的方式处理。换句话说,网关缓存检索包括页面片段缓存的或从后端应用程序请求的页面片段了。当所有的ESI标签已经得到解决,网关缓存合并每个进入主页,将最后的内容发送给客户机。

所有这一切发生透明网关缓存级别(即以外的应用程序)。您将看到,如果你选择利用ESI标签,Symfony2使包括他们几乎毫不费力的过程。ob娱乐下载

利用ESI Symfonyob娱乐下载2

首先,使用应急服务国际公司,一定要使它在应用程序中配置:

  • YAML
  • XML
  • PHP
1 2 3 4
# app / config / config.yml框架:#……应急服务国际公司:{启用:真正的}

现在,假设您有一个页面,是相对静态的,除了新闻股票底部的内容。欧宝平台是合法的吗应急服务国际公司,您可以缓存的新闻播报独立页面的其余部分欧宝平台是合法的吗。

1 2 3 4 5 6 7 8
公共函数indexAction(){美元响应=美元- >呈现(“MyBundle: MyController: index.html.twig”);/ /设置共享的最大年龄——这也标志着公众反应美元响应- >setSharedMaxAge (600年);返回美元响应;}

在这个例子中,整页缓存一生的十分钟。接下来,包括新闻播报模板通过嵌入一个欧宝平台是合法的吗动作。这是通过的渲染辅助(见创建和使用模板更多的细节)。

作为嵌入式内容来自另一个页面(或控制器),Symfony2使用标准ob娱乐下载渲染辅助配置ESI标签:

  • 嫩枝
  • PHP
1 2 3 4 5
{#你可以用一个控制器参考#}{{render_esi(控制器(”……:欧宝平台是合法的吗新闻' {'马克斯”:5}))}}{#……或URL #}{{render_esi (url (latest_欧宝平台是合法的吗news, {马克斯”:5}))}}

通过使用应急服务国际公司渲染器(通过render_esi树枝函数),你告诉Symfony2行动应该呈现为一ob娱乐下载个ESI标签。你可能想知道为什么要使用一个辅助而不是自己写ESI标签。这是因为使用帮助使您的应用程序安装工作即使没有网关缓存。

当使用默认渲染函数(或设置渲染器内联),Sob娱乐下载ymfony2主要包括页面内容合并到一个之前发送响应给客户端。但是如果你使用应急服务国际公司渲染器(即调用render_esi),如果Sob娱乐下载ymfony2检测到与网关缓存支持应急服务国际公司,它生成一个应急服务国际公司包括标签。但如果没有网关缓存或如果它不支持ESI, Symfony2只会合并包括页面中的内容主要的一个,因为它会做如果你有使用ob娱乐下载渲染

请注意

ob娱乐下载Symfony2检测如果网关缓存支持应急服务国际公司通过另一个开箱即用的支持的Akamai规范Symfony2反向代理。

嵌入的行动现在可以指定自己的缓存规则,完全独立于主页。

1 2 3 4 5 6
公共函数欧宝平台是合法的吗newsAction(美元马克斯){/ /……美元响应- >setSharedMaxAge (60);}

应急服务国际公司,整页缓存将有效期为600秒,但是新闻组件缓存只会持续60秒。欧宝平台是合法的吗

当使用一个控制器参考,ESI标签应该引用嵌入的行动作为一个URL访问网关缓存可以取回它独立于页面的其余部分。ob娱乐下载Symfony2负责生成惟一的URL为任何控制器参考和它能够正确路线它们由于一个侦听器,必须启用您的配置:

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

ESI渲染器的一个很大的优势是,您可以让您的应用程序根据需要动态的同时,达到应用程序尽可能少。

提示

侦听器只对本地IP地址或值得信赖的代理。

请注意

一旦你开始使用应急服务国际公司,记得总是使用s-maxage指令,而不是信息。当浏览器只接收聚合资源,它不知道子组件,所以它会遵守信息指令和缓存整个页面。你不想要。

render_esi辅助支持两种其他有用的选项:

  • alt:作为alt属性ESI标签,它允许您指定一个替代URL,如果使用src无法找到;
  • ignore_errors:如果设置为true,onerror属性将被添加到应急服务国际公司的价值继续表明,在发生故障时,网关缓存只会默默地删除ESI标签。

缓存失效

“计算机科学中只有两个艰难的事:缓存失效和命名的事情。”--Phil Karlton< /p>

你不应该需要缓存的数据无效,因为失效已经考虑在HTTP缓存模型。如果你使用验证,你不需要定义任何失效;如果你使用过期,需要资源失效,这意味着设置过期日期在未来太远。

请注意

由于失效是一个特定于每个主题类型的反向代理,如果你不担心失效,您可以切换反向代理不改变任何应用程序代码。

实际上,所有反向代理提供清除缓存数据的方法,但是你应该尽可能避免它们。最标准的方法是清除缓存对于一个给定的URL请求的特殊清洗HTTP方法。

这里是如何配置Symfony2反向代理来支持ob娱乐下载清洗HTTP方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25
/ / app / AppCache.php/ /……使用ob娱乐下载\\FrameworkBundle\HttpCache\HttpCache;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;AppCache扩展HttpCache{受保护的函数无效(请求美元请求,美元= false){如果(“清除”= = !美元请求- >getMethod ()) {返回::无效(美元请求,美元);}美元响应=反应();如果(!美元- >getStore ()- >清洗(美元请求- >getUri ())) {美元响应- >setStatusCode (404年,“不清除”);}其他的{美元响应- >setStatusCode (200年,“清除”);}返回美元响应;}}

谨慎

你必须保护清洗HTTP方法避免随机人清除你的缓存数据。

总结

ob娱乐下载Symfony2旨在遵循证明规则:HTTP。缓存也不例外。掌握Symfony2缓存系统ob娱乐下载意味着熟悉HTTP缓存模型和有效地使用它们。这意味着,而不是仅仅依靠Symfony2文档和代码示例,您可以访问世界的知识与HTTP缓ob娱乐下载存和清漆等网关缓存欧宝官网下载app。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。