Hallo allen,
Niet zozeer een concrete vraag, maar ik was benieuwd hoe jullie website cachen (en invalideren)
Om de reactietijd te vergroten in een Laravel applicatie, wil ik een Reverse proxy gebruiken. Ik gebruik nu Symfony HttpCache, die later makkelijk om te zetten zou moeten zijn naar Varnish oid (omdat hij gewoon de Http cache specificatie gebruikt). Daarnaast wil ik client side laten cachen, zodat de pagina niet steeds opnieuw opgevraagd hoeft te worden (bij wat rondklikken, bespaart tijd/resources).
Nu stel ik bijvoorbeeld in Symfony HttpCache in voor bepaalde pagina's:
Dan zou de pagina dus 5 minuten aan de clientside gecached moeten worden, en 1 dag door de reverse proxy. Aangezien de content niet regelmatig veranderd, wis ik nu de cache zodra er een iets veranderd. (Dus dat zou ook een jaar kunnen zijn)
Nu werkt dit opzich prima, de eerste keer komt er een verse reactie, die daarna gecached wordt. De 2de keer wordt voor die gebruiker de server niet meer gebruikt (want in client cache). Nu komt 5 minuten later een andere gebruiker. Deze krijgt de reactie vanuit de reverse proxy, maar omdat deze al > 5 minuten oud is, wordt deze niet meer client-side gecached. Dit is aan de ene kant logisch, maar ik wil eigenlijk dat de client hem ook nog 5 minuten cached. Ligt dat aan HttpCache van Symfony, of is de specificatie gewoon zo? Als ik bijvoorbeeld bij Tweakers kijk, komt de reactie zo te zien uit Varnish, maar is de Age wel altijd 0. (Alleen wordt daar geen client-side caching gebruikt)
Ik heb ook het idee dat de hele cache wissen eigenlijk niet de oplossing is, maar voor relatief kleine sites die weinig veranderen, wel het makkelijkste is. Wat doen jullie om de reverse proxy cache te invalideren? Korte tijden gebruiken, een lijst met urls bijhouden om een PURGE commando te sturen, alleen e-tags/last modified gebruiken?
E-tag/last-modified wou ik eigenlijk niet gebruiken omdat ik het simpel wil houden (gewoon aantal URL's voor bepaalde tijd cachen), aangezien ik anders alsnog per request in de database moet controleren of de inhoud wel/niet gewijzigd is.
(En ja, voor kleine sites is het waarschijnlijk overkill, maar ik wil graag mijn websites zoveel mogelijk optimaliseren voor de gebruiker en voorbereid zijn op een grote toestroom van bezoekers ineens)
Niet zozeer een concrete vraag, maar ik was benieuwd hoe jullie website cachen (en invalideren)
Om de reactietijd te vergroten in een Laravel applicatie, wil ik een Reverse proxy gebruiken. Ik gebruik nu Symfony HttpCache, die later makkelijk om te zetten zou moeten zijn naar Varnish oid (omdat hij gewoon de Http cache specificatie gebruikt). Daarnaast wil ik client side laten cachen, zodat de pagina niet steeds opnieuw opgevraagd hoeft te worden (bij wat rondklikken, bespaart tijd/resources).
Nu stel ik bijvoorbeeld in Symfony HttpCache in voor bepaalde pagina's:
PHP:
1
2
3
| $response->setPublic(); $response->setMaxAge(300); $response->setSharedMaxAge(86400); |
Dan zou de pagina dus 5 minuten aan de clientside gecached moeten worden, en 1 dag door de reverse proxy. Aangezien de content niet regelmatig veranderd, wis ik nu de cache zodra er een iets veranderd. (Dus dat zou ook een jaar kunnen zijn)
Nu werkt dit opzich prima, de eerste keer komt er een verse reactie, die daarna gecached wordt. De 2de keer wordt voor die gebruiker de server niet meer gebruikt (want in client cache). Nu komt 5 minuten later een andere gebruiker. Deze krijgt de reactie vanuit de reverse proxy, maar omdat deze al > 5 minuten oud is, wordt deze niet meer client-side gecached. Dit is aan de ene kant logisch, maar ik wil eigenlijk dat de client hem ook nog 5 minuten cached. Ligt dat aan HttpCache van Symfony, of is de specificatie gewoon zo? Als ik bijvoorbeeld bij Tweakers kijk, komt de reactie zo te zien uit Varnish, maar is de Age wel altijd 0. (Alleen wordt daar geen client-side caching gebruikt)
Ik heb ook het idee dat de hele cache wissen eigenlijk niet de oplossing is, maar voor relatief kleine sites die weinig veranderen, wel het makkelijkste is. Wat doen jullie om de reverse proxy cache te invalideren? Korte tijden gebruiken, een lijst met urls bijhouden om een PURGE commando te sturen, alleen e-tags/last modified gebruiken?
E-tag/last-modified wou ik eigenlijk niet gebruiken omdat ik het simpel wil houden (gewoon aantal URL's voor bepaalde tijd cachen), aangezien ik anders alsnog per request in de database moet controleren of de inhoud wel/niet gewijzigd is.
(En ja, voor kleine sites is het waarschijnlijk overkill, maar ik wil graag mijn websites zoveel mogelijk optimaliseren voor de gebruiker en voorbereid zijn op een grote toestroom van bezoekers ineens)