《交响乐5:快车道》的封面欧宝娱乐app下载地址

欧宝娱乐app下载地址交响乐5:快车道是学习现代Symfony发展的最佳书籍,从零到生产。欧宝娱乐app下载地址+300页展示与Docker,API,队列和欧宝娱乐app下载地址异步任务,网克,SPA等的Symfony。

HTTP缓存

HTTP缓存

丰富的Web应用程序的性质意味着它们是动态的。无论您的应用程序如何效率,每个请求都将始终包含比服务于静态文件更多的开销。通常,那很好。但是当您需要快速闪电时,您需要HTTP缓存。

在巨人的肩膀上缓存

使用HTTP缓存,可以缓存页面的全部输出(即响应),并绕过应用程序完全在后续请求中。高度动态网站还不能始终响应整个响应,或者是吗?和边缘侧包括(ESI),您只能使用HTTP缓存的电源碎片你的网站。

Symf欧宝娱乐app下载地址ony缓存系统不同,因为它依赖于定义的HTTP缓存的简单性和功率RFC 7234 - 缓存.symfony而不是重新加注缓存方法,而是拥有定义Web上基本通信的标准。欧宝娱乐app下载地址了解基本的HTTP验证和过期缓存模型后,您将准备好掌握Symfony缓存系统。欧宝娱乐app下载地址

因为使用HTTP进行缓存并不是Symfony所独有的,所以已经有很多关于这个主题欧宝娱乐app下载地址的文章了。如果你是HTTP缓存的新手,Ryan Tomayko的文章缓存做的事情高度推荐。另一个深入的资源是Mark Nottingham的缓存教程

使用网关缓存进行缓存

当使用HTTP缓存时,缓存与应用程序完全分离,位于应用程序和发出请求的客户端之间。

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

在此过程中,缓存将存储每个被认为“可缓存”的响应(参见使您的回复HTTP可缓存).如果再次请求相同的资源,缓存将将缓存的响应发送给客户机,完全忽略您的应用程序。

这种类型的缓存称为HTTP网关缓存,许多存在诸如清漆反向代理模式下的鱿鱼,和symfony反欧宝娱乐app下载地址向代理。

小费

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

欧宝娱乐app下载地址Symfony反向代理

欧宝娱乐app下载地址Symfony附带了在PHP中编写的反向代理(即网关缓存)。它不像Varnish那样是一个功能齐全的反向代理缓存,但是开始的好方法。

小费

有关设置清漆的详细信息,请参阅如何使用amish加快我的网站

要启用代理,首先创建一个缓存内核:

// src / cachekernel.php名称空间应用程序;使用欧宝娱乐app下载地址Symfony \包\ FrameworkBundle \ HttpCache \ HttpCache;班级cachekernel.延伸httpcache.{}

修改前控制器的代码将默认内核包装到缓存内核中:

12 3 4 5 6 7 8 9 10 11 12 13 14
// public / index.php+使用app \ cachekernel;使用App \内核;/ /……内核美元=新内核($ _SERVER [' APP_ENV '], (bool) $ _SERVER [' APP_DEBUG ']);+ //在'prod'环境中使用CacheKernel封装默认内核+如果('prod'=== $ kernel-> geteNvironment()){+ $ kernel = new cachekernel($内核);+}$请求=请求:: createfromglobals();/ /……

缓存内核将立即充当反向代理:缓存来自应用程序的响应,并将它们返回给客户机。

警告

如果你在用framework.http_method_override.选项中读取HTTP方法_方法参数,请参阅上面的链接需要进行调整。

小费

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

error_log.美元的内核->getLog());

cachekernel.对象具有明智的默认配置,但可以通过覆盖覆盖的一组选项来精细调整getOptions()方法:

// src / cachekernel.php名称空间应用程序;使用欧宝娱乐app下载地址Symfony \包\ FrameworkBundle \ HttpCache \ HttpCache;班级cachekernel.延伸httpcache.{保护函数getOptions.()大批{返回['default_ttl'=>0.// ......];}}

有关选项及其含义的完整列表,请参阅httpcache :: __构造()欧宝体育电话

当你处于调试模式(第二个参数)内核前控制器中的构造函数是真正的),S欧宝娱乐app下载地址ymfony自动添加一个X-欧宝娱乐app下载地址Symfony-Cache标题到响应。你也可以使用trace_level配置选项并将其设置为没有任何短的满的添加此信息。

短的将只添加主请求的信息。它以一种简洁的方式编写,使得在服务器日志文件中记录信息很容易。例如,在Apache中您可以使用%{x-欧宝娱乐app下载地址symfony-cache} oLogFormat格式语句。此信息可用于提取有关路由缓存效率的一般信息。

小费

您可以使用该文件更改用于跟踪信息的标题的名称trace_header.配置选项。

使您的回复HTTP可缓存

添加了反向代理缓存(例如Symfony反向代理或播放)后,您可以随时缓存您的响应。欧宝娱乐app下载地址要做到这一点,你需要交流到你的缓存哪一个响应是可缓存的,可缓存多长时间。这是通过在响应上设置HTTP缓存头来实现的。

HTTP指定了四个响应缓存头,可以设置为启用缓存:

  • 缓存控制
  • 到期
  • Etag.
  • 最后修改

这四个头用来帮助缓存您的响应通过两个不同的模型:

  1. 过期的缓存用于对特定时间(例如24小时)缓存您的整个响应。简单,但缓存失效更困难。
  2. 验证缓存更复杂:用于缓存您的响应,但允许您在内容更改时动态地使其失效。

过期的缓存

最容易的缓存响应的方法是通过将其缓存为特定的时间:

// src / controller / blogcontroller.php使用欧宝娱乐app下载地址symfony \ component \ httpfoundation \ response;// ......上市函数指数(){//以某种方式创建一个响应对象,就像渲染模板一样$响应=$这一点->渲染'博客/ index.html.twig'[]);//公开缓存3600秒$响应->setpublic.();$响应->setmaxage.3600.);//(可选)设置自定义缓存控制指令$响应->标题->addCacheControlDirective“must-revalidate”真正的);返回$响应;}

感谢您的新代码,您的HTTP响应将具有以下标题:

1
Cache-Control: public, maxage=3600,必须重新验证

这会告诉您的HTTP反向代理缓存此响应3600秒。如果任何人3600秒前再次请求此URL,您的应用程序惯于被击中。如果您使用的是Symfony反向代理,请欧宝娱乐app下载地址查看X-欧宝娱乐app下载地址Symfony-Cache用于调试关于缓存命中和未命中的信息的标题。

小费

请求的URI用作缓存键(除非您不同).

这提供了出色的性能,并且使用简单。但是,缓存无效不支持。如果内容发生变化,则需要等到缓存到期后才能更新页面。

小费

事实上,你能够手动使你的缓存无效,但这不是HTTP缓存规范的一部分缓存失效

如果您需要为许多不同的控制器操作设置缓存头,请退房foshttpcachebundle..它提供了一种基于URL模式和其他请求属性定义缓存头的方法。

最后,有关过期缓存的更多信息,请参阅HTTP缓存过期

验证缓存

对于过期缓存,你会说“缓存3600秒!”但是,当有人更新缓存内容时,在缓存过期之前,您不会在您的站点上看到这些内容。

如果您需要查看更新的内容立即地,你要么需要无效你的缓存使用验证缓存模型。

有关详细信息,请参阅HTTP缓存验证

安全方法:只缓存GET或HEAD请求

HTTP缓存仅适用于“安全”HTTP方法(如GET和HEAD)。这意味着三件事:

  • 不要尝试缓存或删除请求。它不起作用,有充分的理由。这些方法旨在在突变申请状态时使用(例如删除博客文章)。缓存它们会阻止某些请求击中和突变您的应用程序。
  • 发布后请求通常被认为是不可行的,但他们可以缓存当它们包含显式的新鲜度信息时。但是,POST缓存并没有得到广泛的实现,所以如果可能的话应该避免它。
  • 你应该绝不在响应Get或Head请求时更改申请状态(例如更新博客文章)。如果这些请求缓存,则未来的请求可能实际上可能无法击中您的服务器。

更多响应方法

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

//标志着响应陈旧$响应->到期();//强制响应返回正确的304响应,没有内容$响应->setnotmodified.();

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

//使用此方法在一个呼叫中设置多个缓存设置//(此示例列出了所有可用的缓存设置)$响应->setCache([“must_revalidate”=>错误的'no_cache'=>错误的'no_store'=>错误的'no_transform'=>错误的“公共”=>真正的“私人”=>错误的“proxy_revalidate”=>错误的'max_age'=>600“s_maxage”=>600'不可变'=>真正的“last_modified”=>\约会时间(),“etag”=>“六边形abcdef”]);

5.1版中的新增功能:must_revalidateno_cacheno_store.no_transform.proxy_revalate指令在Symfony 5.1中被引入。欧宝娱乐app下载地址

缓存失效

缓存失效是不是部分HTTP规范。尽管如此,删除各种HTTP高速缓存条目可能真的很有用,因此您的网站上的某些内容已更新。

有关详细信息,请参阅缓存失效

使用边缘包括

当页面包含动态部分时,您可能无法缓存整个页面,而是只有其它部分。读使用边缘侧包括了解如何为页面的特定部分配置不同的缓存策略。

HTTP缓存和用户会话

只要在请求期间开始会话时,Symfony将响应转换为私有不可加速的响应。欧宝娱乐app下载地址这是不缓存专用用户信息的最佳默认行为(例如,购物车,用户配置文件详细信息等)并将其公开给其他访客。

但是,甚至可以在某些情况下缓存使用会话的请求。例如,可以为属于该组的所有用户缓存与某些用户组相关的信息。处理这些高级缓存方案超出了symfony的范围,但它们可以解决欧宝娱乐app下载地址foshttpcachebundle.

为了禁用使用会话未采取的会话请求的默认symfony行为,将以下欧宝娱乐app下载地址内部标头添加到您的响应和symfony不会修改它:

使用欧宝娱乐app下载地址symfony \ component \ httpkernel \ eventListener \ AbstractSessionListener;$响应->标题->AbstractSessionListener.::no_auto_cache_control_header.“真正的”);

总结

欧宝娱乐app下载地址Symfony的设计遵循了已被证明行之有效的规则:HTTP。缓存也不例外。掌握Symfony缓存系统意欧宝娱乐app下载地址味着要熟悉HTTP缓存模型并有效地使用它们。这意味着,您可以访问与HTTP缓存和Varnish等网关缓存相关的知识世界,而不是仅仅依欧宝娱乐app下载地址赖于Symfon欧宝体育电话y文档和代码示例。

这项工作包括代码样本,是在a下获得的许可Creative Commons by-SA 3.0执照。