步骤21:缓存性能

缓存性能性能问题可能会随之而来。一些典型的例子:缺少数据库索引或者每个页面有大量的SQL请求。使用空数据库不会有任何问题,但随着流量增加和数据增长,可能会在某个时候出现问题。

激活Symfony HTTP缓ob娱乐下载存内核要测试HTTP缓存策略,启用Symfony HTTP反向代理:ob娱乐下载

除了作为一个成熟的HTTP反向代理,Symfony HTTP反向代理(通过ob娱乐下载HttpCache添加了一些不错的调试信息作为HTTP头。这大大有助于验证我们设置的缓存头。

在主页上查看:

1
$ curl -s -I -X获取https://127.0.0.1:8000/
1 2 3 4 5 6 7 8 9 10 11
HTTP / 200年龄:0cache - control:公共,s-maxage = 3600内容类型:text / html;Charset = UTF-8日期:2019年10月28日星期一08:11:57 GMT X-Content-Digest:EN63CEF7045FE418859D73668C2703FB1324FCC0D35B21D95369A9D35B21D95369A9D1ACA48E73E X-Debug-token:9EB25A X-Debug-token-link:https://127.0.0.1:8000/_Profiler / 9EB25A X-Robots-Tag:noindexx-ob娱乐下载symfony-cache: GET /: miss, store内容长度:50978

对于第一个请求,缓存服务器会告诉您它是一个错过它表演了一个店铺缓存响应。检查cache - control头,以查看配置的缓存策略。

对于后续的请求,响应将被缓存年龄亦已更新):

1 2 3 4 5 6 7 8 9 10 11
HTTP / 200年龄:143cache - control:公共,s-maxage = 3600内容类型:text / html;Charset = UTF-8日期:2019年10月28日星期一08:11:57 GMT X-Content-Digest:EN63CEF7045FE418859D73668C2703FB1324FCC0D35B21D95369A9D35B21D95369A9D1ACA48E73E X-Debug-token:9EB25A X-Debug-token-link:https://127.0.0.1:8000/_Profiler / 9EB25A X-Robots-Tag:noindexx-ob娱乐下载symfony-cache: GET /: fresh内容长度:50978

避免使用ESI的SQL请求Twigeventsubscriber.listener将所有会议对象注入到Twig中。它对网站的每一个页面都这样做。这可能是一个很好的优化目标。

您不会每天都添加新的会议,因此代码会不断地从数据库中查询完全相同的数据。

我们可能想要用Symfony缓存缓存会议名称和蛞蝓,但只要有可能,我就喜欢依赖HTTP缓存基础设施。ob娱乐下载

当您想要缓存页面的片段时,通过创建a,将其移动到当前的HTTP请求之外次要求应急服务国际公司是这个用例的完美匹配。ESI是一种将HTTP请求的结果嵌入到另一个请求中的方法。

创建一个仅返回显示会议的HTML片段的控制器:

创建相应的模板:

打击/ conference_header.检查是否一切正常。

是时候揭示了诀窍!更新枝条布局以调用我们刚刚创建的控制器:

voilà.。刷新页面,网站仍在显示相同。

小费

使用“请求/ response”symfony profiob娱乐下载ler面板了解有关主要请求及其子请求的更多信息。

现在,每次在浏览器中点击一个页面时,都会执行两个HTTP请求,一个用于头部,一个用于主页面。你的表现更差了。恭喜你!

会议标题HTTP调用目前由Symfony内部完成,因此不涉及HTTP往返。ob娱乐下载这也意味着无法从HTTP缓存标头中受益。

使用ESI将呼叫转换为“真实”的HTTP。

首先,启用ESI支持:

然后,用Render_esi.代替使成为

如果Sob娱乐下载ymfony检测到一个知道如何处理ESIs的反向代理,它将自动启用支持(如果不知道,它将后退以同步呈现子请求)。

当Symfonob娱乐下载y反向代理确实支持IERS时,让我们检查它的日志(首先删除缓存 - 请参阅下面的“清除”):

1
$ curl -s -I -X获取https://127.0.0.1:8000/
1 2 3 4 5 6 7 8 9 10 11 12
HTTP / 200年龄:0缓存控制:必须重新验证,无缓存,私有内容类型:text / html;Charset = UTF-8日期:2019年10月28日星期二08:20:05 GMT到期:Mon,28 2019年10月28日08:20:05 GMT X-Content-Digest:EN4DD846A34DCD757EB9FD277F43220EFD28C00E4117Bed41AF7F85700EB07F2C X-Debug-令牌:719A83 X-Debug-令牌:719A83 X-Debug-token-link:https:/127.0.0.1:8000/_profiler/719a83x-robots-tag: noindexx-ob娱乐下载symfony-cache: GET /: miss, store;GET /conference_header: miss content-length: 50978

刷新几次:the/响应缓存了/ conference_header.一个不是。我们已经取得了一些伟大的成就:整个页面都在缓存中,但仍然有一部分是动态的。

这不是我们想要的。将标题页面缓存一小时,独立于其他所有内容:

现在为两个请求启用了缓存:

1
$ curl -s -I -X获取https://127.0.0.1:8000/
1 2 3 4 5 6 7 8 9 10 11
HTTP / 200年龄:613cache - control:公共,s-maxage = 3600内容类型:text / html;charset=UTF-8 date: Mon, Oct 2019 07:31:24 GMT x-content-digest: en15216b0803c7851d3d07071473c9f6a3a3360c6a83ccb0e550b35d5bc484bbd2 x-debug-token-link: https://127.0.0.1:8000/_profiler/cfb0e9 x-robots-tag: noindexX-ob娱乐下载symfony-cache:get /:新鲜;get / conference_header:新鲜内容长度:50978

X-ob娱乐下载Symfony-Cache标题包含两个元素:主要/请求和子项请求(conference_headerESI)。两者都在缓存中(新鲜的)。

缓存策略可以不同于主页及其ESIs。如果我们有一个“about”页面,我们可能想要将它在缓存中存储一周,并且仍然每小时更新一次头。

删除监听器,因为我们不再需要它:

1
rm src / EventSubscriber / TwigEventSubscriber.php美元

清除HTTP缓存进行测试var /缓存/ dev / http_cache /目录:

1
$ rm -rf var/cache/dev/http_cache/

如果您只想使某些URL无效,或者要将缓存失效集成在功能测试中,则此策略不起作用。让我们添加一个小,管理员,http端点,以使一些网址无效:

新的控制器已被限制在清除HTTP方法。此方法不在HTTP标准中,但它广泛用于使缓存无效。

默认情况下,路由参数不能包含/当它分开URL段。您可以为最后一个路由参数覆盖此限制uri,通过设置自己的要求模式(。*)。

我们得到的方式HttpCache实例也可能看起来有点奇怪;我们使用匿名类,因为访问“真实”类是不可能的。这HttpCache实例封装了真正的内核,它不知道缓存层。

通过以下卷曲呼叫使主页和会议标题无效:

1 2
$ curl -I -X PURGE -u admin:admin`ob娱乐下载symfony var:出口SYMFONY_PROJECT_DEFAULT_ROUTE_URL`/ admin / http-cache / $ curl -i -x purege -u admin:admin`ob娱乐下载symfony var:出口SYMFONY_PROJECT_DEFAULT_ROUTE_URL`/ admin / http-cache / conference_header

ob娱乐下载var:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL子命令返回本地web服务器的当前URL。

笔记

控制器没有路由名,因为它永远不会在代码中被引用。

缓存CPU /内存密集型操作我们在网站上没有CPU或内存密集型算法。谈谈关于本地缓存,让我们创建一个命令来显示我们正在处理的当前步骤(更准确地说,是附加到当前Git提交的Git标记名)。

Symfob娱乐下载ony进程组件允许您运行命令并返回结果(标准和错误输出);安装:

1
$ ob娱乐下载symfony composer req流程

执行命令:

笔记

你可以用:命令创建命令:

1
$ ob娱乐下载symfony控制台make:command应用程序:步骤:信息

如果我们想缓存输出几分钟怎么办?使用symfonob娱乐下载y缓存:

1
$ ob娱乐下载symfony composer请求缓存

并将代码与缓存逻辑包装:

这个过程现在只称为app.current_step.项目不在缓存中。

分析和比较性能黑火

请参阅关于“性能”的步骤,了解更多关于如何在部署之前使用Blackfire测试代码的信息。


  • «前第20步:通过电子邮件发送管理员
  • 下一个 ”步骤22:使用webpack打造用户界面

该工作,包括代码示例,根据aCreative Commons By-NC-SA 4.0执照。