De situatie is de volgende. Ik beheer een grote Nederlandstalige website met allemaal dynamische pagina's die eigenlijk elk uur (niet minder dan 60 minuten in iedergeval) bijgewerkt wordt met informatie. Elke pagina heeft een heel zwaar php script dat een hele boel selectie's doet op de database en hieruit tabellen, teksten etc. opmaakt.
De pagina's worden nu gecached door elke eerste bezoeker die de pagina opvraagt. Bij elke hit wordt er gekeken met PHP of er een cache is en of de tijd van het bestandje nog niet te oud is. Dit gaat allemaal prima, als het bestandje nog niet oud is (3600 seconden) dan presenteerd hij deze supersnel aan de bezoeker.
Echter nu komt het. Elke eerste bezoeker die zit met een gigantisch lange laadtijd. Ik heb er eens een PHP scriptje opgezet om te kijken hoelang het allemaal duurt voordat zo'n zware pagina gemaakt is en in cache gezet is. Totaal komt dit ongeveer op (schrik niet) 13 seconden. Elke eerste bezoeker van elke pagina van de website elk uur moet dus 13 seconden wachten voordat er iets verschijnd. Dit is veel te lang.
Eigenlijk wil ik dat die ladtijd veel korter word. Maar aan de andere kant een Cron te gaan runnen op elke pagina op de site (als ik zo kan achterhalen hoeveel het er precies zijn is onbegonnen werk, daarbij slurpt dit bandbreedte. Mijn vraag is nu: Hoe kan ik dit het beste aanpakken? Zijn er snellere methode's op pagina's te cachen zonder dat de laadtijd in gedrang komt?
Ik heb aan het optimaliseren van de Mysql query's weinig gehad tot nu. In totaal zijn er nu maar 6 per pagina (dit worden er meer) maar met veel overlappingen en dit doort zaakjes "text.linx = linx.id AND...." bovendien een "LIMIT 0,200 op elke query" omdat ik op voorhand niet altijd weet hoeveel ik er exact nodig heb. Reden dat ik die grote selectie's doe en niet gewoon op de pagina zelf is dat ik een doorlopende lijst wil hebben verdeeld over de pagina en "RAND()". Als ik kleine selectie's doe dan heb ik kans op dubbele.
De pagina's worden nu gecached door elke eerste bezoeker die de pagina opvraagt. Bij elke hit wordt er gekeken met PHP of er een cache is en of de tijd van het bestandje nog niet te oud is. Dit gaat allemaal prima, als het bestandje nog niet oud is (3600 seconden) dan presenteerd hij deze supersnel aan de bezoeker.
Echter nu komt het. Elke eerste bezoeker die zit met een gigantisch lange laadtijd. Ik heb er eens een PHP scriptje opgezet om te kijken hoelang het allemaal duurt voordat zo'n zware pagina gemaakt is en in cache gezet is. Totaal komt dit ongeveer op (schrik niet) 13 seconden. Elke eerste bezoeker van elke pagina van de website elk uur moet dus 13 seconden wachten voordat er iets verschijnd. Dit is veel te lang.
Eigenlijk wil ik dat die ladtijd veel korter word. Maar aan de andere kant een Cron te gaan runnen op elke pagina op de site (als ik zo kan achterhalen hoeveel het er precies zijn is onbegonnen werk, daarbij slurpt dit bandbreedte. Mijn vraag is nu: Hoe kan ik dit het beste aanpakken? Zijn er snellere methode's op pagina's te cachen zonder dat de laadtijd in gedrang komt?
Ik heb aan het optimaliseren van de Mysql query's weinig gehad tot nu. In totaal zijn er nu maar 6 per pagina (dit worden er meer) maar met veel overlappingen en dit doort zaakjes "text.linx = linx.id AND...." bovendien een "LIMIT 0,200 op elke query" omdat ik op voorhand niet altijd weet hoeveel ik er exact nodig heb. Reden dat ik die grote selectie's doe en niet gewoon op de pagina zelf is dat ik een doorlopende lijst wil hebben verdeeld over de pagina en "RAND()". Als ik kleine selectie's doe dan heb ik kans op dubbele.