性能缓存
CDN一个>嗯,我很高兴见到你。
Lass uns die主页für eine Stunde cachen:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -33,9 +33,12 @@ class ConferenceController extends AbstractController #[路由('/',名称:'主页')]公共函数索引(ConferenceRepository $ ConferenceRepository): Response {-返回新的响应($this->twig->渲染('conference/index.html。嫩枝”,(+ $response = new response ($this->twig->render('conference/index.html。嫩枝”,('conference ' => $conferenceRepository->findAll(),]));+ $响应- > setSharedMaxAge (3600);++返回$response;} #(路线(“/会议/{蛞蝓}”,名字:“会议”))
死setSharedMaxAge ()
-Methode konfiguriert die Cache-Dauer für反向代理。VerwendesetMaxAge ()
嗯den Browser-Cache zu steuern。Sekunden angegeben的Die Zeit bird (1 Stunde = 60分钟= 3600 Sekunden)。
它是动态的,动态的。Jeder kann jederzeit einen Kommentar hinzufügen, und niemand将eine Stunde warten,嗯ihn online zu sehen。Verwende在solchen Fällen dieHTTP-Validation *选择策略。
Lass uns die主页für eine Stunde cachen:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -33,9 +33,12 @@ class ConferenceController extends AbstractController #[路由('/',名称:'主页')]公共函数索引(ConferenceRepository $ ConferenceRepository): Response {-返回新的响应($this->twig->渲染('conference/index.html。嫩枝”,(+ $response = new response ($this->twig->render('conference/index.html。嫩枝”,('conference ' => $conferenceRepository->findAll(),]));+ $响应- > setSharedMaxAge (3600);++返回$response;} #(路线(“/会议/{蛞蝓}”,名字:“会议”))
死setSharedMaxAge ()
-Methode konfiguriert die Cache-Dauer für反向代理。VerwendesetMaxAge ()
嗯den Browser-Cache zu steuern。Sekunden angegeben的Die Zeit bird (1 Stunde = 60分钟= 3600 Sekunden)。
它是动态的,动态的。Jeder kann jederzeit einen Kommentar hinzufügen, und niemand将eine Stunde warten,嗯ihn online zu sehen。Verwende在solchen Fällen dieHTTP-Validation *选择策略。
TwigEventSubscriber-Listener injiziert eine global Variable mit allen Konferenzobjekten in Twig。Dies geschieht für jede einzelne Seite der website。Das ist wahrscheinlich ein großer Optimierungspunkt。
Du wirht jeden Tag neue Konferenzen hinzufügen, sodass der Code immer wieder genau die gleichen Daten ausder Datenbank abfragt。
Wir möchten vielleicht die Konferenznamen und Slugs mit dem ob娱乐下载Symfony Cache zwischenspeichern。Ich verlasse michigan jedoch, wann immer es möglich ist, auf die http - caching - infrastrucktur。
要是Du静脉段静脉Seite zwischenspeichern想,verschiebe es来自民主党aktuellen http请求,indem Du杯Sub-Requesterstellst。应急服务国际公司ist die perfeckte Ergänzung zu diesem Anwendungsfall。Ein ESI ist eine Möglichkeit, das Ergebnis einer HTTP-Anfrage in eine andere einzubetten。
Erstelle einen Controller, der nur das HTML-Fragment zurückgibt, welches die Konferenzen anzeigt:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@类ConferenceController扩展AbstractController返回$response;}+ #[路由('/conference_header',名称:'conference_header')]+公共功能conferenceHeader(ConferenceRepository $ ConferenceRepository):响应+ {+返回新的响应($this->twig->render('conference/header.html. html. '嫩枝”,(+ 'conference ' => $conferenceRepository->findAll(),+)));+}+#[路由('/conference/{slug}',名称:'conference')]公共功能显示(请求$请求,会议$会议,CommentRepository $ CommentRepository,字符串$photoDir):响应{
Erstelle das entsprecende模板:
Rufe/ conference_header
im浏览器auf,嗯zu überprüfen, ob alles in Ordnung ist。
Zeit, den Trick zu enthüllen!Aktualisiere das树枝模板,um den soeben erstellten控制器aufzurufen:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -16,11 +16,7 @@<身体> <标题> < h1 > < a href = "{{路径(主页)}}" >留言板< / > < / h1 >——< ul >-{%用于会议中的会议%}- {{conference}} .- {% endfor %}- < / ul >+ {{render(path('conference_header'))}}
{% block body %}{% endblock %}
和瞧.阿克图阿利西埃尔死在那里和你的时间就在那里。
提示
Verwende das ob娱乐下载Symfony分析器-面板“请求/响应”,um mehr über den主请求和塞纳子请求zu erfahren。
修女werden bei jedem Aufruf einer Seite im Browser zwei HTTP-Requests ausgeführt, einer für den Header und einer für die Hauptseite。杜有模具性能。衷心祝贺!
Der Konferenz头http请求奇怪的derzeit实习生冯Symfony durchgeführt,所以dob娱乐下载ass kein http -往返erforderlich ist。die bedeutet auch, dass es keine Möglichkeit gibt, von HTTP-Cache-Headern zu profitieren。
Konvertiere den Request in einen "echten" HTTP-Request mit Hilfe von ESI。
Aktiviere zunächst den ESI-Support:
1 2 3 4 5 6 7 8 9 10 11
——/ config /包/ framework.yaml+ + + b / config /包/ framework.yaml@@ -12,7 +12,7 @@ framework: cookie_samesite: lax storage_factory_id: session.storage.factory.native- #esi: true+ esi: true# php_errors: log: true
Verwenderender_esi
anstelle冯渲染
:
1 2 3 4 5 6 7 8 9 10 11
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -16,7 +16,7 @@<身体> <标题> < h1 > < a href = "{{路径(主页)}}" >留言板< / > < / h1 >- {{render(path('conference_header'))}}+ {{render_esi(path('conference_header'))}}
{% block body %}{% endblock %}
Wenn ob娱乐下载Symfony einen反向代理错误,der mit umgehen kann, aktiviert es den ESI-Support自动完成(Wenn niht, greift es auf渲染
zurück,恩登子请求同步auszuführen)。
Da der ob娱乐下载Symfony反向代理ESIs unterstützt, sollten wir seine Logs überprüfen (zuerst den Cache entfernen - siehe“Purging”unten):
1
$curl -s -I -X GET https://127.0.0.1:8000/
12 3 4 5 6 7 8 9 10 11 12
HTTP/2 200时代:0缓存控制:必须重新验证,没有缓存,私有内容类型:文本/html;charset=UTF-8 date: Mon, 28 Oct 2019 08:20:05 GMT expires: Mon, 28 Oct 2019 08:20:05 GMT x-content-digest: en4dd846a34dcd757eb9fd277f43220effd28c00e4117bed41af7f85700eb07f2c x-debug-token: 719a83 x-debug-token-link: https://127.0.0.1:8000/_profiler/719a83 x-robot -tag: noindex x-ob娱乐下载 symfy -cache: GET /: miss, store;GET /conference_header: miss content-length: 50978
Aktualisiere die Seite einige男:死/
-回应鸟zwischengespeichert und die/ conference_header
反应不。Wir haben etwas Großartiges erreicht: Wir haben die ganze Seite im Cache, aber ein Teil ist immer noch dynamisch。
Das ist aber nicht Das,是wir wollen。缓存模具头- seite für eine Stunde, unabhängig von allem anderen:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ - 444,9 + 444,12 @@ class ConferenceController extends AbstractController #[路由('/conference_header',名称:'conference_header')]公共函数conferenceHeader(ConferenceRepository $ ConferenceRepository): Response {-返回新的响应($this->twig->渲染('conference/header.html. html。嫩枝”,(+ $response = new response ($this->twig->render('conference/header.html. html。嫩枝”,('conference ' => $conferenceRepository->findAll(),]));+ $响应- > setSharedMaxAge (3600);++返回$response;} #(路线(“/会议/{蛞蝓}”,名字:“会议”))
Der Cache ist nun für beide请求aktiviert:
1
$curl -s -I -X GET https://127.0.0.1:8000/
1 2 3 4 5 6 7 8 9 10 11
HTTP/2 200 age: 613 cache-control: public, s-maxage=3600 content-type: text/html;charset=UTF-8 date: Mon, 28 Oct 2019 07:31:24 GMT x-content-digest: en15216b0803c7851d3d07071473c9f6a3a3360c6a83ccb0e550b35d5bc484bbd2 x-debug-token: cfb0e9 x-debug-token-link: https://127.0.0.1:8000/_profiler/cfb0e9 x-robot -tag: noindex x-ob娱乐下载 symfy -cache: GET /: fresh;GET /conference_header: fresh content-length: 50978
Derx-ob娱乐下载symfony-cache
-Header enthält zwei Elemente: den主请求/
子请求(denconference_header
应急服务国际公司)。Beide befinden sich im Cache (新鲜的
).
Cache-Strategie kann sich von der Hauptseite and ihren isunterscheiden。Wenn wir eine "Über"-Seite haben, möchten wir sie vielleicht für eine Woche im Cache speichern und trotzdem den Header jede Stunde aktualisieren lassen。
Entferne den Listener, da wir ihn niht mehr benötigen:
1
$rm src / EventSubscriber / TwigEventSubscriber.php
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@类ConferenceController扩展AbstractController返回$response;}+ #[路由('/conference_header',名称:'conference_header')]+公共功能conferenceHeader(ConferenceRepository $ ConferenceRepository):响应+ {+返回新的响应($this->twig->render('conference/header.html. html. '嫩枝”,(+ 'conference ' => $conferenceRepository->findAll(),+)));+}+#[路由('/conference/{slug}',名称:'conference')]公共功能显示(请求$请求,会议$会议,CommentRepository $ CommentRepository,字符串$photoDir):响应{
/ conference_header
im浏览器auf,嗯zu überprüfen, ob alles in Ordnung ist。12 3 4 5 6 7 8 9 10 11 12 13 14 15
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -16,11 +16,7 @@<身体> <标题> < h1 > < a href = "{{路径(主页)}}" >留言板< / > < / h1 >——< ul >-{%用于会议中的会议%}- {{conference}} .- {% endfor %}- < / ul >+ {{render(path('conference_header'))}}
{% block body %}{% endblock %}
提示
Verwende das ob娱乐下载Symfony分析器-面板“请求/响应”,um mehr über den主请求和塞纳子请求zu erfahren。
1 2 3 4 5 6 7 8 9 10 11
——/ config /包/ framework.yaml+ + + b / config /包/ framework.yaml@@ -12,7 +12,7 @@ framework: cookie_samesite: lax storage_factory_id: session.storage.factory.native- #esi: true+ esi: true# php_errors: log: true
render_esi
anstelle冯渲染
:1 2 3 4 5 6 7 8 9 10 11
——/模板/ base.html.twig+ + + b /模板/ base.html.twig@@ -16,7 +16,7 @@<身体> <标题> < h1 > < a href = "{{路径(主页)}}" >留言板< / > < / h1 >- {{render(path('conference_header'))}}+ {{render_esi(path('conference_header'))}}
{% block body %}{% endblock %}
渲染
zurück,恩登子请求同步auszuführen)。1
$curl -s -I -X GET https://127.0.0.1:8000/
12 3 4 5 6 7 8 9 10 11 12
HTTP/2 200时代:0缓存控制:必须重新验证,没有缓存,私有内容类型:文本/html;charset=UTF-8 date: Mon, 28 Oct 2019 08:20:05 GMT expires: Mon, 28 Oct 2019 08:20:05 GMT x-content-digest: en4dd846a34dcd757eb9fd277f43220effd28c00e4117bed41af7f85700eb07f2c x-debug-token: 719a83 x-debug-token-link: https://127.0.0.1:8000/_profiler/719a83 x-robot -tag: noindex x-ob娱乐下载 symfy -cache: GET /: miss, store;GET /conference_header: miss content-length: 50978
/
-回应鸟zwischengespeichert und die/ conference_header
反应不。Wir haben etwas Großartiges erreicht: Wir haben die ganze Seite im Cache, aber ein Teil ist immer noch dynamisch。12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ - 444,9 + 444,12 @@ class ConferenceController extends AbstractController #[路由('/conference_header',名称:'conference_header')]公共函数conferenceHeader(ConferenceRepository $ ConferenceRepository): Response {-返回新的响应($this->twig->渲染('conference/header.html. html。嫩枝”,(+ $response = new response ($this->twig->render('conference/header.html. html。嫩枝”,('conference ' => $conferenceRepository->findAll(),]));+ $响应- > setSharedMaxAge (3600);++返回$response;} #(路线(“/会议/{蛞蝓}”,名字:“会议”))
1
$curl -s -I -X GET https://127.0.0.1:8000/
1 2 3 4 5 6 7 8 9 10 11
HTTP/2 200 age: 613 cache-control: public, s-maxage=3600 content-type: text/html;charset=UTF-8 date: Mon, 28 Oct 2019 07:31:24 GMT x-content-digest: en15216b0803c7851d3d07071473c9f6a3a3360c6a83ccb0e550b35d5bc484bbd2 x-debug-token: cfb0e9 x-debug-token-link: https://127.0.0.1:8000/_profiler/cfb0e9 x-robot -tag: noindex x-ob娱乐下载 symfy -cache: GET /: fresh;GET /conference_header: fresh content-length: 50978
x-ob娱乐下载symfony-cache
-Header enthält zwei Elemente: den主请求/
子请求(denconference_header
应急服务国际公司)。Beide befinden sich im Cache (新鲜的
).1
$rm src / EventSubscriber / TwigEventSubscriber.php
请注意
杜的帽子:命令
nutzen können,嗯den Befehl zu erstellen:
1
$ob娱乐下载Symfony控制台制作:命令应用:一步:信息
是,wenn wir die Ausgabe für ein paar Minuten cachen wollen?Verwende den ob娱乐下载Symfony Cache。
Und umschließe den Code mit der Cache-Logik:
12 34 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 35 36 37
——/ src /命令/ StepInfoCommand.php+ + + b / src /命令/ StepInfoCommand.php@@ -6,16 +6,31 @@使用Symob娱乐下载fony\组件\控制台\命令\命令;使用Syob娱乐下载mfony \ \控制台输入\ \ InputInterface组件;使用Syob娱乐下载mfony \组件\ \控制台输出\ OutputInterface;使用Syob娱乐下载mfony \组件\ \过程;+使用Syob娱乐下载mfony \ \缓存\ CacheInterface合同;class StepInfoCommand extends Command {protected static $defaultName = 'app:step:info';+ private $cache;++公共函数__construct(CacheInterface $cache)+ {+ $this->cache = $cache;++父:__construct ();+}+执行(InputInterface $input, OutputInterface $output): int {- $ = new过程([“git”、“标签”,“- l”,“——点”,“头”));-过程- > mustRun ();-输出- >写美元(美元过程- > getOutput ());+ $step = $this->cache->get('应用程序。函数($item) {+ $ = new过程([“git”、“标签”,“- l”,“——点”,“头”));+ $流程- > mustRun ();+ $ item - > expiresAfter (30);++ $process->getOutput();+});+输出美元- > writeln($步骤);返回0;}
Der Prozess wnun nuch aufgerufen, wenn sich dasapp.current_step
-Element nicht im Cache befindet。