乌泽西·帕米亚奇·波德勒切内奇·兹维耶克什尼亚·维达伊诺维奇 CDN一个>Do buforowania na wzhazle krazyncowym dla jeszcze lepszej wydajnowicci。 Zapiszmy stronę domową w pamiachipodrielcznej na godzinę: 1 2 3 4 5 6 7 8 9 10 11 ——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -30,7 +30,7 @@类ConferenceController扩展AbstractController{返回$this->渲染('conference/index.html. html。twig', ['conferences' => $conferenceRepository->findAll(),-]);+) - > setSharedMaxAge (3600);} #(路线(“/会议/{蛞蝓}”,名字:“会议”)) MetodasetSharedMaxAge ()Konfiguruje wygaensnieccie pamiachci podrarencznej dla zwrotnego serwera poenserredniczizecgo (ang。反向代理)。UżyjsetMaxAge ()做kontrolowania pamiichci podrichcznej przeglawakdarki。Czas wyravany jest w sekundach (1 godzina = 60分钟= 3600秒)。 布弗洛瓦尼·斯特罗尼·konferencji jest wyzwaniem,波尼瓦耶扎est ona bardzo dynamiczna卡夫迪移动多达克komentarz w dowolnej chwili nikt nie chce捷克godzinę, aby zobaczyic上网。W takich przypadkach nalevy stosowaic strategięwalidacji HTTP. 1 2 3 4 5 6 7 8 9 10 ——/ config /包/ framework.yaml+ + + b / config /包/ framework.yaml@@ -23,3 +23,7 @@ when@test: test: true session: storage_factory_id: session.storage.factory.mock_file++ when@dev:+框架:+ http_cache: true Oprócz tego, zwrotny serwer poredniczzhewcy (ang。反向代理)HTTP, dodaje上(poprzez klasęHttpCache) kilka przydatnych informacji o debugowaniu jako nagłówki HTTP。Bardzo pomaga to w sprawzaniu poprawnowicci nagłówków pamiichci podrichcznej, które ustawilikjmy。 mogesz sprawdziic jego dziayanie na stronie głównej: 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: 0 cache-control: public, s-maxage=3600 content-type: text/html;charset=UTF-8 date: Mon, 28 Oct 2019 08:11:57 GMT x-content-digest: en63cef7045fe418859d73668c2703fb1324fcc0d35b21d95369a9ed1aca48e73e x-debug-token: 9eb25a x-debug-token-link: https://127.0.0.1:8000/_profiler/9eb25a x-robot -tag: noindex x-ob娱乐下载 symfy -cache: GET /: miss, store content-length: 50978 wprzypadku pierwszego, serwer pamiecci podrichcznej mówi, zye byolto小姐(brak wpisu w pamiecich podrichcznej) I ze wykonawarsaw akcję商店(buforowania odpowiedzi)。Sprawdź唠叨łowekcache - control(kontrola pamiichpodrichcznej), aby zobaczyic konfigurację odpowiedzialną za strategię pamiichpodrichcznej。 W przypadku kolejnych, zyndaya, odpowiedzynjest, przechowywana, W pamiecich, podrichcznej。Rownież年龄(czas, który upzynzhekowod ostatniego zapisu) zostawarsaw zaktualizowany: 1 2 3 4 5 6 7 8 9 10 11 HTTP/2 200 age: 143 cache-control: public, s-maxage=3600 content-type: text/html;charset=UTF-8 date: Mon, 28 Oct 2019 08:11:57 GMT x-content-digest: en63cef7045fe418859d73668c2703fb1324fcc0d35b21d95369a9ed1aca48e73e x-debug-token: 9eb25a x-debug-token-link: https://127.0.0.1:8000/_profiler/9eb25a x-robot -tag: noindex x-ob娱乐下载 symfy -cache: GET /: fresh content-length: 50978 TwigEventSubscriberwstrzykuje globalną zmienną do Twiga ze wszystkimi obiektami konferencji。Czyni to dla kaovdej strony witryny。笑话到prawdopodobnie wietne miejsce do optymalizacji。 Nie bzydziesz dodawawarsaw nowych konferencji codziennie, wiecich kod odpytuje o dodsadnie te same dane z bazy danych w kółko。 movemy chciek buforowaic nazwy konferencji i slugi uzvwajaob娱乐下载c Symfony Cache, ale, kiedy tylko jest to mowliwe, lubię polegak na infrastruckturze buforowania HTTP。 jeutli chcesz zapisaic w pamiichci podrellcznej fragment strony, przeniezowenzich go poza biewizhce wachodie HTTP, tworzenscżą丹尼cząstkowe.应急服务国际公司笑话做tego idealnym rozwienzaniem。ESI jest sposobem osadzenia wyniku winnym。 Utwórz kontroler zwracajagicy tylko fragment kodu HTML, który wywietla konferencje: 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -33,6 +33,14 @@ class ConferenceController extends AbstractController])->setSharedMaxAge(3600);}+ #[路由('/conference_header',名称:'conference_header')]+公共功能conferenceHeader(ConferenceRepository $ ConferenceRepository):响应+ {+返回$this->渲染('conference/header.html. html. '嫩枝”,(+ 'conference ' => $conferenceRepository->findAll(),+));+}+#[Route('/conference/{slug}', name: 'conference')] Utwórz odpowiedni szablon: 模板/会议/ header.html.twig 1 2 3 4 5 <ul>{%为会议中的会议%}<李><一个href="{{path('conference',{蛞蝓:会议。Slug})}}">{{conference}}一个>李>{%endfor%}ul> Otworz/会议/头大腹大腹,大腹大腹。 Czas na magiczną sztuczkę!Zaktualizuj szablon Twig, aby wywowoak kontroler, który wyachennie stworzyliievmy: 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 %} 等好了.奥德维耶耶stronę,维特娜纳达尔维维耶特拉się达克萨莫。 提示 uzyj panelu "请求/响应" profilera Symfony, aby ob娱乐下载dowiedziec się wiecuccej o głównym wachoduni i wachoddaniach czzhestkowych。 Teraz za kaymdym razem, gdy wejdziesz na stronę w przeglhezdarce, wykonywane są dwa budapest HTTP, jedno dla nagłówka i jedno dla strony głównej。Pogorszyliś我wydajność。Gratulacje ! wywoyanie HTTP nagłówka konferencji jest obbecnie wykonywane wewnichtrznie przob娱乐下载ez Symfony, dzizyki czemu unikamy zewnichtrznego po华沙czenia HTTP。Oznacza到również, ze nie ma mozliwoitzi skorzystania z nagłówków pamiichci podrichcznej HTTP。 Skonwertuj powitzczenie na "prawdziwe" powitzczenie HTTP za pomocą ESI。 Po pierwsze, wwitzcz obsługę ESI: 1 2 3 4 5 6 7 8 9 10 11 ——/ config /包/ framework.yaml+ + + b / config /包/ framework.yaml@@ -13,7 +13,7 @@ framework: cookie_samesite: lax storage_factory_id: session.storage.factory.native- #esi: true+ esi: true# php_errors: log: true Następnie użyjrender_esizamiast渲染: 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 %} jeutliob娱乐下载 Symfony wykryje zwrotny serwer poredniczzicy (ang。反向代理),który wie, jak radziic sobie z ESI - wwazcza obsługę automatycznie。jeowli nie, to wraca do renderowania, tzstkowego synchronicznie。 波尼瓦耶扎茨罗特尼(ang。反向代理)Symfony obob娱乐下载susguguje ESI, sprawdzhemy jego logi (najpierw wyczyovic pamiachik podręczną - zobacz“Usuwanie”ponizhej): 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 奥德维耶耶吉尔卡疯狂:奥德维耶德林泽/Jest buforowana,一个/ conference_header桔多琪ż聂。奥西瓦茨尼亚耶维奇科瓦尼亚耶戈:妈妈całą stronę w帕米亚奇波德勒切涅耶德纳兹耶基切耶维奇笑话动力。 Nie tego jednak chcemy。Zapisz stronę z nagłówkiem w pamiachici podrielcznej na godzinę, niezalebnie od wszystkiego innego: 1 2 3 4 5 6 7 8 9 10 11 ——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -38,7 +38,7 @@类ConferenceController扩展AbstractController{返回$this->渲染('conference/header.html. html。twig', ['conferences' => $conferenceRepository->findAll(),-]);+) - > setSharedMaxAge (3600);} #(路线(“/会议/{蛞蝓}”,名字:“会议”)) 帕米耶基·波德勒切斯纳·波德勒切斯纳·德拉·奥布·瓦茨瓦茨达斯: 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 唠叨łowekx-ob娱乐下载symfony-cacheZawiera dwa elementy:托瓦达尼główne/欧拉兹·瓦茨瓦茨(conference_header应急服务国际公司)。欧巴znajdują się w帕米亚奇波德勒奇涅(新鲜的). 战略帕米亚奇波德勒切涅默泽克奥德米亚纳德拉斯罗尼głównej i jej ESI。耶耶利妈妈stronę“o nas”,莫泽米·契耶奇ją普雷切瓦克przez tydziezynw帕米耶奇podrellcznej i纳达尔米耶奇nagłówek aktualizowany co godzinę。 乌苏尼亚纳乌基瓦茨(昂。听众),波朱耶戈涅波特西布洁米: 1 $rm src / EventSubscriber / TwigEventSubscriber.php var /缓存/ dev / http_cache /: 1 $Rm -rf var/cache/dev/http_cache/ 到podejwiccie nie dziaaya za dobrze, jeutli chcesz tylko uniewautniki niektóre adresy URL lub jeutli chcesz wutizyic uniewautnienie pamiichci podrellcznej do testów funkchenalnych。Dodajmy may, dostzynpny tylko dla konta administracyjnego, punkt kozyncowy HTTP, aby uniewazhenich niektóre adresy URL: 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 38 39 ——/ config /包/ security.yaml+ + + b / config /包/ security.yaml@@ -17,6 +17,8 @@ security: lazy: true provider: app_user_provider custom_authenticator: App\ security \AppAuthenticator+ http_basic: {realm:管理区域}+ entry_point:应用程序\Security\AppAuthenticator注销:path: app_logout #注销后重定向的路径——/ src /控制器/ AdminController.php+ + + b / src /控制器/ AdminController.php@@ -8,6 +8,8使用Doctrine\ORM\EntityManagerInterface;控制器使ob娱乐下载用Symfony \包\ FrameworkBundle \ \ AbstractController;使用Syob娱乐下载mfony \ HttpFoundation \ \组件请求;组件使用ob娱乐下载Symfony \ \ HttpFoundation \反应;+使用Syob娱乐下载mfony \组件\ HttpKernel \ HttpCache \ StoreInterface;+使用Syob娱乐下载mfony \ \ HttpKernel \ KernelInterface组件;使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;使用Syob娱乐下载mfony \组件\路由\注释\路线;使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;@@ -47,4 +49,16 @@类AdminController extends AbstractController 'comment' => $comment,]));}++ #(路线(' / admin / http缓存/ {< uri。*>}',方法:['PURGE'])]+公共函数purgehttcache (KernelInterface $kernel, Request $ Request, string $uri, StoreInterface $store): Response+ {+ if ('prod' === $kernel->getEnvironment()) {+返回新的响应('KO', 400);+}++ $存储- >清除(请求- > getSchemeAndHttpHost()。‘/’。美元uri);++返回新的响应('Done');+}} 现在,kontroler zostaova graniczony do metody清洗HTTP。Metoda ta nie znajduje się w standardzie HTTP, ale jest powszechnie stosowana do uniewazvniania pamiachci podrellcznej。 多米维尔尼参数trasy聂mogą扎维拉克/, poniewa耶rozdzielają片段URL。Ograniczenie到moutna pominihich w odniesieniu做ostatniego参数trasy, na przykwaduri.ustawiajh3c wjasasny wzór wymagapen (.*). Sposób w jaki otrzymujmy instancjęHttpCachemoze wyglagidaic nieco dziwnie;乌兹瓦米·克拉西·阿尼莫维,波尼瓦耶扎斯托扎普·克拉西·“rzeczywistej”涅兹耶维。InstancjaHttpCacheOwija prawdziwe jdro, które niejest wiwiadome warstwy pamiecci podrichcznej, tak jak powinno byich。 uniewaennienie pamiachci podrenchcznej strony głównej i nagłówka konferencji za po核辐射nictwm nastenspujjzycych powazczeky卷曲: 1 2 $curl -s -I -X PURGE -u admin:admin 'ob娱乐下载 symfony var:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL / admin / http缓存/$curl -s -I -X PURGE -u admin:admin 'ob娱乐下载 symfony var:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL ' / admin / http缓存/ conference_header Podpolecenieob娱乐下载symfony var:导出SYMFONY_PROJECT_DEFAULT_ROUTE_URLzwraca biebudapest adres URL lokalnego serwera WWW。 请注意 Kontroler nie posiada nazwy trasy, poniewa耶扎迪nie bbludzimy się do niego odwoywaki w kodzie。 /管理.Zamiast powtarzac go na wszystkich trasach, nalevy zrefaktorowaic trasy w celu skonfigurowania prefiksu na samej klasie: 12 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 ——/ src /控制器/ AdminController.php+ + + b / src /控制器/ AdminController.php@@ -15,6 +15,7使用Symfonob娱乐下载y\组件\路由\注释\路由;使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;用树枝\环境;+ #(路线(' / admin '))类AdminController extends AbstractController{公共函数__construct(@@ -24,7 +25,7 @@类AdminController extends AbstractController) {}- #[Route('/admin/comment/review/{id}', name: 'review_comment')]+ #(路线(' /评论/审查/ {id}’,名字:“review_comment”))公共函数reviewComment(Request $ Request, Comment $ Comment, WorkflowInterface $commentStateMachine): Response {$accepted = !$ Request ->query->get('reject');@@ -50,7 +51,7 @@类AdminController extends AbstractController));}- #(路线(' / admin / http缓存/ {< uri。*>}',方法:['PURGE'])]+ #【路线(' / http缓存/ {< uri。*>}',方法:['PURGE'])]public function purgehttpache (KernelInterface $kernel, Request $ Request, string $uri, StoreInterface $store): Response {if ('prod'=== $kernel-> getenvirenvironment ()) { src /命令/ StepInfoCommand.php 12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 名称空间应用程序\命令;使用ob娱乐下载\组件\控制台\属性\AsCommand;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;使用ob娱乐下载\组件\过程\过程;# (AsCommand(“应用步骤:信息”)]类StepInfoCommand扩展命令{受保护的函数执行(InputInterface$输入, OutputInterface$输出):int{$过程=新过程([“git”,“标签”,“- l”,”——点“,“头”]);$过程->mustRun ();$输出->写($过程->getOutput ());返回命令::成功;}} 请注意 莫żesz użyć:命令做stworzenia polecenia: 1 $ob娱乐下载Symfony控制台制作:命令应用:一步:信息 一分钟?Dodaj do projektu modudoob娱乐下载va Symfony Cache。 我uuyj pamiachci podrichcznej: 12 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 ——/ src /命令/ StepInfoCommand.php+ + + b / src /命令/ StepInfoCommand.php@@使用Symfony\组件\控制台\命令\ob娱乐下载命令;使用Syob娱乐下载mfony \ \控制台输入\ \ InputInterface组件;使用Syob娱乐下载mfony \组件\ \控制台输出\ OutputInterface;使用Syob娱乐下载mfony \组件\ \过程;+使用Syob娱乐下载mfony \ \缓存\ CacheInterface合同;#[AsCommand('app:step:info')] class StepInfoCommand扩展命令{+公共函数__construct(+ private CacheInterface+) {+父:__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($步骤);返回命令:成功;} 进程jest teraz wywoywany tylko wtedy, gdy元素app.current_step聂兹那杜耶się w帕米亚奇波德勒切涅。