缓存per le prestazioni
CDN一个>Per sfruttare una rete distribuita di cache, Per prestazioni ancora migliori。
Mettiamo在cache l'首页per un'ora:
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;} #(路线(“/会议/{蛞蝓}”,名字:“会议”))
Il metodosetSharedMaxAge ()
Configura la scadenza Della cache per I反向代理。利用我自己setMaxAge ()
每个冒名顶替il tempo di缓存每个浏览器。Il tempo è espresso在秒di (1 ora = 60分钟= 3600秒di)。
Gestire la cache della pagina della conferenza è più impegnativo, perché è una pagina più dinamica。基昂克può在这片土地上,我的赞美之词在这片土地上,我的赞美之词在这片土地上。在查案时,运用的是策略validazione HTTP.
Mettiamo在cache l'首页per un'ora:
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;} #(路线(“/会议/{蛞蝓}”,名字:“会议”))
Il metodosetSharedMaxAge ()
Configura la scadenza Della cache per I反向代理。利用我自己setMaxAge ()
每个冒名顶替il tempo di缓存每个浏览器。Il tempo è espresso在秒di (1 ora = 60分钟= 3600秒di)。
Gestire la cache della pagina della conferenza è più impegnativo, perché è una pagina più dinamica。基昂克può在这片土地上,我的赞美之词在这片土地上,我的赞美之词在这片土地上。在查案时,运用的是策略validazione HTTP.
反向代理HTTP,反向代理HTTP di Symfony (tramite la libreria)ob娱乐下载HttpCache
) aggiunge alcune informazioni di debug忽略头HTTP。我想说的是,我想说的是,我想说的是,我想说的是。
Controlliamo l 'homepage:
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
Durante la prima richiesta, il server di cache ci informa che non ha trovato la risposta nella cache (小姐
e ha memorizzato (商店
) la risposta nella cache。控制器l' ntestazione HTTP chiamatacache - control
根据战略战略,缓存配置。
Nelle richhieste, le risposte vengono prese dalla cache年龄
è stato aggiornato):
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
TwigEventSubscriberaggiunge una variable globale在Twig con tutti gli oggetti conferenza。我要你吃我的肉。概率是必然的。
非si aggiungonve nouove会议ogni giorno, quindi codice审问gli stentii数据数据库più e più volte。
Potremmo voler mettere in cache i nomi e gli slug delle conference con la cache di ob娱乐下载Symfony, ma quando可能的mi place fare affidamento sull' infrastructure uttura di cache HTTP。
在那pagina的框架下,在那富饶的土地上,在那富饶的土地上sotto-richiesta.Per questo caso d'uso应急服务国际公司è la soluzione perfetta。ESI è un modo per corporare il risultato di una rich esta HTTP in un'altra。
Creiamo un controller che restituisce solo il frammento HTML che visualizza le conference:
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):响应{
Creiamo il模板函件:
Apriamo/ conference_header
每个人都有自己的归属。
È ora di svelare il trucco!Aggiorniamo il layout Twig per chiamare il controller che abbiamo appena creato:
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 %}
E瞧.Aggiorniamo la pagina e il sito continuerà一个最珍贵的信息。
提示
Usiamo il pannello“请求/响应”del Profiler di Symfony per sapob娱乐下载erne di più一个富有的人。
Ora, ogni volta che si raggiunge una pagina nel browser vengono eseguite due rich este HTTP: una per l' ntestazione e una per la pagina principale。Abbiamo peggiorato le prestazioni。Congratulazioni !
La chiamata HTTP all' testazione della conferenza è attualmente effettuata international da ob娱乐下载Symfony, quindi non è previsto alcun往返HTTP。Questo significa anche che non c'è modo di beneficiare degli头della缓存HTTP。
转换拉chiamata在una chiamata HTTP“real”利用ESI。
在primo luogo, attiviamo il support to ESI:
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
篇,utilizziamorender_esi
Al posto di渲染
:
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 %}
Se ob娱乐下载Symfony rileva un反向代理che sa come trattare gli ESI, abilita automaticamente il support(在caso contrario, ritorna al render sincrono della richiesta secondaria)。
Poiché il反向代理di Symfony supob娱乐下载porta ESI, controlliamo i suoi log (rimuoviamo prima la cache, si veda la sezione“Pulizia”più avanti):
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
Aggiorniamo qualche volta la pagina: la risposta relativa al percorso/
è在缓存中的拯救,相对而言是可以补救的/ conference_header
Non lo è。Abbiamo ottenuto un grande risultato: l'intera pagina è in cache, ma una sua parte è ancora dinamica。
Ma non è quello che vogliamo。Manteniamo in cache la pagina di ntestazione per un'ora, independence da tutto il resto:
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;} #(路线(“/会议/{蛞蝓}”,名字:“会议”))
La cache è ora abilitata per entrambe le richieste:
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
L 'intestazionex-ob娱乐下载symfony-cache
要素连续性:富有的原则/
e una richhiesta secondaria (l’esiconference_header
).缓存中的声纳(新鲜的
).
秘密战略può秘密秘密,秘密秘密,秘密秘密。“关于”,“关于”的诗,“关于”的诗。
Rimuoviamo il listener, non ne abbiamo più bisogno:
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
每个人都有自己的归属。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 %}
提示
Usiamo il pannello“请求/响应”del Profiler di Symfony per sapob娱乐下载erne di più一个富有的人。
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
Al posto di渲染
: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 %}
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
/
è在缓存中的拯救,相对而言是可以补救的/ conference_header
Non lo è。Abbiamo ottenuto un grande risultato: l'intera pagina è in cache, ma una sua parte è ancora dinamica。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
要素连续性:富有的原则/
e una richhiesta secondaria (l’esiconference_header
).缓存中的声纳(新鲜的
).1
$rm src / EventSubscriber / TwigEventSubscriber.php
请注意
Avremmo potuto usare:命令
Per creare il comando:
1
$ob娱乐下载Symfony控制台制作:命令应用:一步:信息
在每隔一分钟的缓存输出中有多少volessimo metrere ?Usiamo il componente Cache di ob娱乐下载Symfony。
E aggiungiamo la logica della cache al codice:
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;}
Il processo è ora richiamato solo se l'elementapp.current_step
缓存中没有è。
使用清漆来punto di ingresso principale nelle rotte:
1 2 3 4 5 6
——/ .platform / routes.yaml+ + + b / .platform / routes.yaml@@ -1,2 +1,2 @@——“https://{} /”:{类型:上游,上游:“应用:http”}+"https://{all}/": {type: upstream, upstream: "varnish:http", cache: {enabled: false}}“http://{} / ":{类型:重定向,:“https://{} /”}
Infine, creiamo un file di configurazioneconfig.vcl
每清漆: